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部分之前的空格。其实没什么大不了的。