1

次の例のような文字列があります。

  1. lookbehind text bla lookahead
  2. lookbehind text bla
  3. text bla lookahead
  4. text bla

すべての場合にどのように一致させるのtext blaですか? text bla空白を含む文字列である可能性があります。

正規表現(?<=lookbehind\s)[\w\s]+(?=\slookahead)では、いいえの場合にのみ機能します。1.

他の例をどのようにカバーしますか?

4

4 に答える 4

5

これを試して:

^(?:.*lookbehind\s*)?((?:(?!\slookahead)[\w ])+)

ここでRegexrを参照してください

これはもう少し複雑です。より簡単な解決策は見つかりませんでした。「lookbehind\s*」が存在する場合は一致するため、結果は常にグループ 1 のキャプチャにあります。

^文字列の開始

(?:lookbehind\s*)?オプションのグループで、「後読み」は後続のすべての空白と一致します。

少し複雑な部分があります。

(                              # Start of the capturing group, stores the interesting part in group 1
    (?:                        # Non capturing group
        (?!\slookahead)[\w\s]  # Match [\w\s] only if it is not the start of the sequence "\slookahead"
    )+                         # repeat this
)
于 2013-06-06T11:54:04.890 に答える
2

次の正規表現でうまくいくはずです:

(?:(?!lookbehind|lookahead)\b\w+\b| )+

ライブデモ: http://www.rubular.com/r/rBB3GmgBec

于 2013-06-06T12:05:36.553 に答える
0

別のアプローチとして、正規表現の置換を使用して、不要なテキスト (後読み部分と先読み部分) をすべて削除することもできます。

\s*(?:lookbehind|lookahead)\s*

C# での例を次に示します。

string result = Regex.Replace(testInput, @"\s*(?:lookbehind|lookahead)\s*", "", RegexOptions.IgnoreCase);
于 2013-06-06T12:42:28.447 に答える
0

特定のテキストまたは開始/終了に一致させるには、ルックアラウンドが必要なようです。

(?<=((lookbehind)|^)\s*)text bla(?=\s*(lookahead)|$)
于 2013-06-06T13:22:53.803 に答える