假设以下单词序列
BLA text text text text text text BLA text text text text LOOK text text text BLA text text BLA
我想要做的是将文本从BLA提取到LOOK,但是最接近外观的BLA。即我想得到
BLA text text text text LOOK
我应该如何使用正则表达式?我找到了一个有效的解决方案,但效率非常低。
BLA(?!.*?BLA.*?LOOK).*?LOOK
是否有更好,更高效的方式来实现匹配此模式?
我想做的是:我希望与BLA相匹配,然后向前推进,直到LOOK的前向前瞻或BLA的前瞻性前瞻。但是我不知道如何把它变成正则表达式。
作为引擎我在python中使用re。
答案 0 :(得分:10)
答案 1 :(得分:0)
只需在LOOK和BLA之间找到没有BLA的文本
In : re.search(r'BLA [^(BLA)]+ LOOK', 'BLA text text text text text text BLA text text text text LOOK text text text BLA text text BLA').group()
Out: 'BLA text text text text LOOK'
: - )
答案 2 :(得分:0)
提取所需文本的另一种方法是使用tempered greedy token技术,该技术与不会以不需要的字符串开头的一系列单个字符匹配。
r'\bBLA\b(?:(?!\bBLA\b).)*\bLOOK\b'
Start your engine! | Python code
\bBLA\b : match 'BLA' with word boundaries
(?: : begin non-capture group
(?!\bBLA\b) : negative lookahead asserts following characters are not
'BLA' with word boundaries
. : match any character
) : end non-capture group
* : execute non-capture group 0+ times
\bLOOK\b : match 'LOOK' with word boundaries
包括单词边界,以避免匹配诸如BLACK
和TRAILBLAZER
之类的单词。