Regex 带和不带向前看和向后看的正则表达式

Regex 带和不带向前看和向后看的正则表达式,regex,Regex,我有一个字符串,看起来像以下示例: lookback文本bla lookahead lookbehind text bla 文本bla前瞻 text bla 如何在每种情况下匹配文本bla? 文本bla可能是带有空格的字符串 使用regex(?尝试以下操作: ^(?:.*lookbehind\s*)?((?:(?!\slookahead)[\w ])+) 看到了吗 这有点复杂,我没有找到更简单的解决方案。结果总是捕获组1,因为我匹配了“lookbehind\s*”(如果有) ^字符串的开头 (

我有一个字符串,看起来像以下示例:

  • lookback文本bla lookahead
  • lookbehind text bla
  • 文本bla前瞻
  • text bla
  • 如何在每种情况下匹配
    文本bla
    文本bla
    可能是带有空格的字符串

    使用regex
    (?尝试以下操作:

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

    这有点复杂,我没有找到更简单的解决方案。结果总是捕获组1,因为我匹配了“lookbehind\s*”(如果有)

    ^
    字符串的开头

    (?:lookback\s*)?
    可选组,将“lookback”与以下所有空格匹配

    现在是有点复杂的部分:

    (                              # 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*)?((?:(?!\slookahead)[\w ])+)
    
    看到了吗

    这有点复杂,我没有找到更简单的解决方案。结果总是捕获组1,因为我匹配了“lookbehind\s*”(如果有)

    ^
    字符串的开头

    (?:lookback\s*)?
    可选组,将“lookback”与以下所有空格匹配

    现在是有点复杂的部分:

    (                              # 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|lookahead)\b\w+\b| )+
    

    现场演示:以下正则表达式应该适用于您:

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

    livedemo:作为一种不同的方法,您可以使用regex替换来删除所有不需要的文本(lookbehind和lookahead部分)

    下面是C#中的一个示例:


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

    下面是C#中的一个示例:


    看起来您需要环视以匹配特定文本或开始/结束:

    (?<=((lookbehind)|^)\s*)text bla(?=\s*(lookahead)|$)
    

    (?看起来您需要环视以匹配特定文本或开始/结束:

    (?<=((lookbehind)|^)\s*)text bla(?=\s*(lookahead)|$)
    

    (?为什么不仅仅是文本bla,当lookback和lookahead也存在时,它会匹配。
    /text bla/
    有什么问题吗?实际上,它是一些带空格的字符串。。可能是个坏例子是的,但是
    text bla
    也可能是
    嗨,怎么了
    。我不希望lookahead和lookahead匹配!@user1451130 the唯一匹配的字符串部分是模式
    文本bla
    。取决于您希望返回整行匹配还是返回行匹配中的标记,最终结果会有所不同。为什么不仅仅是文本bla,当存在后向和前向时它也会匹配。
    /text bla/
    有什么问题吗,实际上它是一些带空格的字符串。可能是个坏例子是的,但是
    text bla
    也可能是
    hi whats
    。而且我不想让lookback和lookahed匹配!@user1451130字符串中唯一匹配的部分是模式
    text bla
    。这取决于您是否希望整行匹配返回ed或行匹配中返回的标记,最终结果将不同。我在RegexBuddy中测试了此正则表达式,但它对我来说不太有效。它在捕获组1中拾取“lookbehind”一词。好的,当“lookbehind”不在字符串开头时会发生这种情况。请尝试此
    ^(?:.*lookbehind\s*)?(?:(!\slookhead)[\w])+)
    你说的对。我的字符串开头有空格。你的新正则表达式现在也可以使用。我在RegexBuddy中测试了这个正则表达式,但它对我不太有效。它在捕获组1中拾取了单词“lookbehind”。好的,当“lookbehind”不在字符串的开头时会出现这种情况。试试这个
    ^(?:*lookbehind\s*)(?:(?!\slookhead)[\w])+)
    你的权利。我在字符串的开头有空格。你的新正则表达式现在也可以在上面工作。这是可行的。但是在输入字符串上运行正则表达式之前必须对其进行修剪。它与查找后面部分之前的空格相匹配。这真的没什么大不了的。这很有效。但是输入字符串必须在运行之前进行修剪在它上面加上正则表达式。它匹配的是在lookback部分之前的空格。其实没什么大不了的。