我正在寻找一种方法来确定多行文本块是否包含任何与格式text- more text
不匹配的行。
所以给出了这个文字:
hello- 12345
hello bye
bye- 123
它应与hello bye
匹配。
如果我尝试匹配那些与此模式匹配的行,我会得到第1行和第3行:
import re
text = """hello- 12345
hello bye
bye- 123"""
for m in re.finditer(r"^\w+-\s+[^\n]+$", text, re.MULTILINE):
print '%02d-%02d: %s' % (m.start(), m.end(), m.group(0))
即返回:
00-12: hello- 12345
23-31: bye- 123
但是,在这种情况下使用负向前瞻与任何事情都不匹配。也就是说,以下内容返回空列表[]
而不是['hello bye']
:
print re.findall(r"^(?!\w+-\s+[^\n]+)$", text, re.MULTILINE)
我在这里缺少什么?
答案 0 :(得分:1)
您的否定前瞻需要有结束锚$
,在前瞻之外,您应该在$
之前找到匹配的模式:
print re.findall(r"^(?!\w+-\s+[^\n]+$).+$", text, re.MULTILINE)
['hello bye']
或者简化:
print re.findall(r"^(?!\w+-\s+.+$).+", text, re.MULTILINE)
['hello bye']
^(?!\w+-\s+[^\n]+)$
只匹配空行,因为它会在开始锚$
之后匹配结束锚^
(中间部分是预见)。