0

常に次のようなタグを検出して、XML文字列に対して変換を実行しようとしています。

<attr name="firstName" />
<attr name="Name" />
<attr name="lastName" />

私はそれをキャッチして、それ自体をサフィックスに置き換えたいので、これを取得します:

<attr name="firstName" /><attr name="beep" />
<attr name="Name" /><attr name="beep" />

でもそれが最後なら何もしたくないです。

<attr name="lastName" />

私はこの検出パターンを試しています。

Regex.Replace(before, "(<attr name=\"[first]*name\" />)", "[0]<attr name=\"beep\" />");

しかし、これは最初ののすべての順列に一致します。正確な文字列「最初」の多くても1つを表現するにはどうすればよいですか?

4

3 に答える 3

1
Regex.Replace(before, "(<attr name=\"[first]?name\" />)", "$0<attr name=\"beep\" />");

*を aに置き換えると、 ?1 回または 0 回の出現が検索されます。

于 2013-03-19T11:02:02.430 に答える
1

否定的な先読みを使用することをお勧めします。

Regex.Replace(before, "(<attr name=\"(?!last)[^\"]*Name\" />)", "$0<attr name=\"beep\" />");

文字列「first」のゼロまたは 1 つを検出するには、後読みをオプションの通常のグループに変更し、「last」を「first」に置き換えるだけです。

Regex.Replace(before, "(<attr name=\"(?:first)?Name\" />)", "$0<attr name=\"beep\" />");
于 2013-03-19T11:17:39.217 に答える
0

あなたが望むのは次のとおりだと思います:

Regex.Replace(before, "(<attr name=\"(?:first)?name\" />)", "$0<attr name=\"beep\" />");

[first]正規表現では、「、、、、または」のいずれかの文字を意味しfます。irst

(?:first)first「 (非キャプチャ)グループとして扱われる文字列」と言います。?次に、先行する一致が 0 回または 1 回発生する必要があることを示します。

于 2013-03-19T11:49:27.763 に答える