簡體   English   中英

在行首搜索 WORD 並包括之前的所有非空白行

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

請參閱正則表達式演示

Python 示例

import re

match = re.search(r"\b((?!\n\n).)*WORD.*?(?=\n)", text, re.S)
if match:
    print(match.group())

Output

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.

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