0

ハウジット、

次のことについて助けが必要です。

文字列内のタグを見つける必要があります。これらのタグは で始まり で{{終わり}}ます。受け取る文字列には複数のタグがあります。

これまでのところ、これはありますが、一致するものが見つかりません。ここで何が欠けていますか?

List<string> list = new List<string>();

string pattern = "{{*}}";

Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
Match m = r.Match(text);

while (m.Success)
{
    list.Add(m.Groups[0].Value);

    m = m.NextMatch();
}


return list;

試してみたstring pattern = "{{[A-Za-z0-9]}}"; サンクス

PS。私は正規表現についてほとんど何も知りません。

4

4 に答える 4

4

{{。+?}}を正規表現として使用するだけでなく、RegexOptions.SingleLineを渡す必要もあります。これにより、文字列全体が1行と。として扱われます。\ nと一致します(通常は一致しません)。

于 2012-08-20T10:40:24.293 に答える
1

次のようなことを試すことをお勧めします。

List<string> list = new List<string>();

string pattern = "{{(.*?)}}";

Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
Match m = r.Match(text);

while (m.Success)
{
    list.Add(m.Groups[1].Value);

    m = m.NextMatch();
}

return list;

正規表現は次を指定します。

{{       # match {{ literally
(        # begin capturing into group #1
  .*?    # match any characters, from zero to infinite, but be lazy*
)        # end capturing group
}}       # match }} literally

「怠惰な」とは、その後もパターンの照合を続けようとすることを意味し、「}}」に戻り、文字が一致しない場合にのみ.*?、しぶしぶキャプチャ グループに文字を追加します。}}

正規表現を変更してコードを変更し、一致全体ではなく、正規表現一致オブジェクト ( ) から最初に一致するグループを抽出するようにしました。m.Groups[1].value

于 2012-08-20T10:56:13.067 に答える
1

試してみてください{{.+}}。これ.+は、タグの一部として少なくとも 1 文字が必要であることを意味します。

編集:

タグを含む文字列を取得するには{{(.+)}}、Tokenize または Scanner クラスで一致をトークン化しますか?

于 2012-08-20T10:36:50.947 に答える
0

{{.*?}}また {{.+?}}

. - 任意の記号を意味します

? - 怠け者を意味します (次のパターンをキャプチャしないでください)

于 2012-08-20T10:38:36.983 に答える