我有一个看起来像这些例子的字符串:
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 ])+)
这有点复杂,我没有找到更简单的解决方案。结果始终在捕获组 1 中,因为如果存在“lookbehind\s*”,我将匹配它。
^
字符串的开始
(?:lookbehind\s*)?
可选组,确实将“lookbehind”与所有后续空格匹配。
现在有一点复杂的部分:
( # 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
)
看起来您需要环视来匹配某些文本或开始/结束:
(?<=((lookbehind)|^)\s*)text bla(?=\s*(lookahead)|$)
作为一种不同的方法,您可以使用正则表达式替换来删除所有不需要的文本(lookbehind 和lookahead 部分)。
\s*(?:lookbehind|lookahead)\s*
这是 C# 中的一个示例:
string result = Regex.Replace(testInput, @"\s*(?:lookbehind|lookahead)\s*", "", RegexOptions.IgnoreCase);