簡體   English   中英

Regext匹配大寫單詞,以及周圍的+ - 4個單詞

[英]Regext to match capitalized word, and the surrounding +- 4 words

我有一堆文件,我有興趣找到臨床試驗的提及。 這些總是用全部大寫字母表示(例如ASPIRE)。 我希望匹配所有大寫字母中的任何單詞,大於三個字母。 我也想要周圍的+ - 4個單詞用於上下文。

以下是我目前的情況。 它有點工作,但未通過下面的測試。

import re
pattern = '((?:\w*\s*){,4})\s*([A-Z]{4,})\s*((?:\s*\w*){,4})'
line = r"Lorem IPSUM is simply DUMMY text of the printing and typesetting INDUSTRY."
re.findall(pattern, line)

以下正則表達式適合您嗎?

(\b\w+\b\W*){,4}[A-Z]{3,}\W*(\b\w+\b\W*){,4}

在此測試: https//regex101.com/r/nTzLue/1/

在左側,您可以匹配任何單詞字符\\w+一次或多次,然后是任何非單詞字符\\W+一次或多次。 將這兩個組合在非捕獲組中並重復4次{4}(?:\\w+\\W+){4}

然后捕獲一組中的3個或更多大寫字符([AZ]{3,})

或者在右側,您可以將左側匹配的單詞和非單詞字符匹配(?:\\W+\\w+){4}

(?:\\w+\\W+){4}([AZ]{3,})(?:\\W+\\w+){4}

捕獲的組將包含您的大寫單詞,而捕獲組將包含周圍的單詞。

您可以在python中使用此代碼,分兩步完成。 首先,我們將輸入分為4個以上的大寫單詞,然后我們在匹配的兩邊找到最多4個單詞。

import re

str = 'Lorem IPSUM is simply DUMMY text of the printing and typesetting INDUSTRY'

re1 = r'\b([A-Z]{4,})\b'
re2 = r'(?:\s*\w+\b){,4}'

arr = re.split(re1, str)

result = []

for i in range(len(arr)):
    if i % 2:
        result.append( (re.search(re2, arr[i-1]).group(), arr[i], re.search(re2, arr[i+1]).group()) )


print result

代碼演示

輸出:

[('Lorem', 'IPSUM', ' is simply'), (' is simply', 'DUMMY', ' text of the printing'), (' text of the printing', 'INDUSTRY', '')]

這應該做的工作:

pattern = '(?:(\w+ ){4})[A-Z]{3}(\w+ ){5}'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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