[英]How to find lines that do not match pattern in a multiline block?
我正在尋找一種方法來確定多行文本塊是否包含不匹配格式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)
我在這里想念什么?
否定的前瞻需要具有結尾錨$
而在前瞻之外,您應該在$
之前具有匹配的模式:
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]+)$
只匹配一個空行 ,因為它將匹配起始錨^
之后的末錨$
(中間部分為超前位置)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.