0

私はそのようなコードを持っています:

String source = "There will will be";
Regex r = new Regex(@"There \w+ be");
Console.WriteLine(r.Match(source).Value);

ソースが存在する場合、出力には何も表示されません。出力が表示されます。誰か説明してくれませんか?

そして、ある程度の質問に。1つまたは2つの単語を見つける正規表現を作成する方法(これは例です。私はある種のパーサーを書いており、そのように動作する独自のwildcharを作成する必要があります)。すでにいくつかの組み合わせを試しましたが、すべて失敗します。私の試みの1つ:

@"\w+\s{1,2}"

{1,2} は、\w+\s 全体ではなく、空白を 1 回または 2 回繰り返すように正規表現に指示しているため、間違っていると思います。それを修正する方法、または別の方法で作成する方法を知っていますか?

4

5 に答える 5

1

この理由は、このコードが一致しないという事実です。\w任意の英数字とアンダースコアを使用できます(つまり、基本的にAthrough Z0through 9、および_)。ただし、スペースは独自のグループです(で表され\sます)。

これを修正するには、一致アルゴリズムが次を使用して任意の要素を選択できるグループを作成することにより、正規表現を両方に一致させることができます[]

There [\w\s]+? be

また、これを貪欲でない一致にするためにを追加し?、テキストの可能な限り小さな部分を一致させようとしていることに注意してください(そうでない場合は、一致している間スキップすることができますbe)。


追加に関しては、一致しないグループを使用するだけです(一致するグループと比較して処理時間とメモリを節約します)。

(?:\w+\s){1,2}

于 2013-01-07T22:50:44.220 に答える
0

\w任意の単語文字(a-zA-Z0-9およびアンダースコア)に一致します。一致There will will beする必要があります。スペースを一致させることができないため、正規表現が一致しません。\w+will will\w

于 2013-01-07T22:50:49.690 に答える
0

これは、スペースが内で一致していないためです\w+。次のいずれかを使用してみてください。

@"There \w+ \w+ be"

また

@"There [\w\s]+ be"
于 2013-01-07T22:51:11.833 に答える
0

\w は単語の文字と一致するため、2 つの「will」文字列の間のスペースによって一致が妨げられます。代わりにそれを置き換えることができ@"There \w+(?:\s+\w+)* be"ます。

于 2013-01-07T23:10:45.670 に答える
0

\wすべての英数字とアンダースコアに一致します。あなたの例でwill willは、スペースを含むものと一致する必要があるため、一致しません。ただし、式はThere will be1 つのみと一致しwillます。

于 2013-01-07T22:51:38.183 に答える