1

我有一个看起来像这些例子的字符串:

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

在每种情况下我如何匹配text blatext bla可能是一些带有空格的字符串。

使用正则表达式(?<=lookbehind\s)[\w\s]+(?=\slookahead),它仅在没有的情况下有效。1.

如何覆盖其他示例?

4

4 回答 4

5

尝试这个:

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

在 Regexr 上查看

这有点复杂,我没有找到更简单的解决方案。结果始终在捕获组 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
)
于 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

看起来您需要环视来匹配某些文本开始/结束:

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

作为一种不同的方法,您可以使用正则表达式替换来删除所有不需要的文本(lookbehind 和lookahead 部分)。

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

这是 C# 中的一个示例:

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