簡體   English   中英

如何在多行塊中查找與模式不匹配的行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM