0

最初のデバッグの下では、'unsbuscrib''d が返され、2 番目のデバッグは unsbuscrib''d が返されます。違いは先頭の '.

私が望むのは、両方が unsbuscrib を返すことです。

    string textText = " 'unsbuscrib''d' ";
    Regex rTest = new Regex(@"\b(ab)|(['\w]+)\b");
    if (rTest.IsMatch(textText))
    {
        Debug.WriteLine(rTest.Match(textText).Value);
    }
    rTest = new Regex(@"\b(['\w]+)\b");
    if (rTest.IsMatch(textText))
    {
        Debug.WriteLine(rTest.Match(textText).Value);
    }

修正は Guffa のおかげで @"\b((ab)|(['\w]+))\b" でした

4

2 に答える 2

1

これは、最初の正規表現が\b(ab)orに一致するため(['\w]+)\bです。

先頭に単語境界の要件がない 2 番目の部分を使用するため、先頭にアポストロフィが含まれます。

2 番目の正規表現では、先頭に単語境界が必要ですが、スペースとアポストロフィの間に単語境界はありません。最初の単語境界は、アポストロフィと文字の間uです。

于 2012-08-26T15:51:37.000 に答える
0

\b 単語境界は、英数字と非アルナム文字の間で一致するため、 と の間では一致しますが と の間では一致'しませuん。<space>'

そして、あなたの交代は最初の正規表現をに分けます

\b(ab)   |   (['\w]+)\b

おそらくあなたが意味した

\b(?:(ab)|(['\w]+))\b
于 2012-08-26T15:51:24.707 に答える