我有一个字符串,看起来像这些例子:
lookbehind text bla lookahead
lookbehind text bla
text bla lookahead
text bla
如何在每种情况text bla
匹配?
text bla
可能是一些带有空格的字符串。
使用正则表达式(?<=lookbehind\s)[\w\s]+(?=\slookahead)
它只适用于没有。 1。
如何涵盖其他例子?
答案 0 :(得分:5)
试试这个:
^(?:.*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
)
答案 1 :(得分:2)
答案 2 :(得分:0)
作为一种不同的方法,您可以使用正则表达式替换来删除所有不需要的文本(lookbehind和lookahead部分)。
\s*(?:lookbehind|lookahead)\s*
这是C#中的一个例子:
string result = Regex.Replace(testInput, @"\s*(?:lookbehind|lookahead)\s*", "", RegexOptions.IgnoreCase);
答案 3 :(得分:0)
看起来你需要环顾四周以匹配某些文字或开始/结束:
(?<=((lookbehind)|^)\s*)text bla(?=\s*(lookahead)|$)