[英]Search for WORD at line-start and include all lines before that are not blank
讓我們看看這段文字:
foo bar
foo bar
bar foo
bla
blu
WORD foo bar
foo bar
我想要一個 python re.search
表達式,它將匹配以WORD
開頭的行和之前的所有非空行。
所以從上面的文字中,它應該提取
bla
blu
WORD foo bar
我的非工作方法是:
re.search(r'\n\n.*(?!\n\n)WORD.*?\n', text, flags=re.DOTALL)
自己找到了答案:
re.search(r'\n(.(?!\n\n))*\nWORD.*?\n', text, flags=re.DOTALL)
搜索以WORD
開頭的行並將該行與所有其他非空行一起包括在內。
要提取完全相同的子文本,請使用此正則表達式
\b((?!\n\n).)*WORD.*?(?=\n)
請參閱正則表達式演示
import re
match = re.search(r"\b((?!\n\n).)*WORD.*?(?=\n)", text, re.S)
if match:
print(match.group())
bla
blu
WORD foo bar
這可以通過使用列表來簡化。 然后只需對一行進行模式匹配——即,不考慮之前看到的內容。 是這樣的:-
FILENAME = 'foo.txt'
stack = []
with open(FILENAME) as data:
for line in map(str.strip, data):
if line:
stack.append(line)
if line.startswith('WORD'): # simplification
print(*stack, sep='\n')
stack = []
else:
stack = []
Output:
bla
blu
WORD foo bar
沒有任何額外的標志
text = #
regex=r'(.+\n)+WORD'
m = re.search(regex, text) # match object
m.group()
#bla
#blu
#WORD
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.