次の例のような文字列があります。
lookbehind text bla lookahead
lookbehind text bla
text bla lookahead
text bla
すべての場合にどのように一致させるのtext bla
ですか?
text bla
空白を含む文字列である可能性があります。
正規表現(?<=lookbehind\s)[\w\s]+(?=\slookahead)
では、いいえの場合にのみ機能します。1.
他の例をどのようにカバーしますか?
次の例のような文字列があります。
lookbehind text bla lookahead
lookbehind text bla
text bla lookahead
text bla
すべての場合にどのように一致させるのtext bla
ですか?
text bla
空白を含む文字列である可能性があります。
正規表現(?<=lookbehind\s)[\w\s]+(?=\slookahead)
では、いいえの場合にのみ機能します。1.
他の例をどのようにカバーしますか?
これを試して:
^(?:.*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
)
別のアプローチとして、正規表現の置換を使用して、不要なテキスト (後読み部分と先読み部分) をすべて削除することもできます。
\s*(?:lookbehind|lookahead)\s*
C# での例を次に示します。
string result = Regex.Replace(testInput, @"\s*(?:lookbehind|lookahead)\s*", "", RegexOptions.IgnoreCase);
特定のテキストまたは開始/終了に一致させるには、ルックアラウンドが必要なようです。
(?<=((lookbehind)|^)\s*)text bla(?=\s*(lookahead)|$)