次の文字列を単語に分割するにはどうすればよいですか
string exp=price+10*discount-30
の中へ
string[] words={'price',discount' }
次の文字列を単語に分割するにはどうすればよいですか
string exp=price+10*discount-30
の中へ
string[] words={'price',discount' }
単語を正規表現と照合して、結果を取得できます。
例:
// This is the input string.
string input = "price+10*discount-30";
var matches = Regex.Matches(input, @"([a-z]+)", RegexOptions.IgnoreCase | RegexOptions.Multiline);
foreach (var match in matches)
{
Console.WriteLine(match);
}
Console.ReadLine();
この例が役立つことを願っています:
string str = "price+10*discount-30";
char[] delimiters = new char[] { '+', '1', '0', '*', '-', '3'};
string[] parts = str.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
foreach (string s in parts)
Console.WriteLine(s);
Console.ReadLine();
出力は次のとおりです。
price
discount
必要なのは、入力の種類に応じて単語をトークン化するレクサーです。これを行う小さなプログラムを次に示します。
int dummy;
string data = "string price = 10 * discount + 12";
string[] words = data.Split(' ');
LinkedList<string> tokens = new LinkedList<string>();
LinkedList<string> keywords = new LinkedList<string>();
LinkedList<string> operators = new LinkedList<string>();
keywords.AddLast("string");
operators.AddLast("*");
operators.AddLast("/");
operators.AddLast("+");
operators.AddLast("=");
operators.AddLast("-");
foreach (string s in words)
{
if (keywords.Contains(s)) continue;
if (operators.Contains(s)) continue;
if (int.TryParse(s, out dummy) == true) continue;
tokens.AddLast(s.Trim());
}
string[] data_split = tokens.ToArray();