Regext匹配大写单词,以及周围的+ - 4个单词

时间:2018-05-01 08:42:13

标签: python regex

我有一堆文件,我有兴趣找到临床试验的提及。这些总是由全部大写字母(例如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)

4 个答案:

答案 0 :(得分:2)

以下正则表达式适合您吗?

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

在这里测试:https://regex101.com/r/nTzLue/1/

答案 1 :(得分:2)

在左侧,您可以匹配任何单词字符\w+一次或多次,然后匹配任何非单词字符\W+一次或多次。将这两个组合在一个非捕获组中,并重复4次{4},如(?:\w+\W+){4}

然后在组([A-Z]{3,})中捕获3个或更多大写字符。

或者在右侧,您可以将左侧匹配的单词和非单词字符匹配(?:\W+\w+){4}

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

捕获的组将包含您的大写单词,而捕获组将包含周围的单词。

答案 2 :(得分:2)

您可以在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

Code Demo

<强>输出:

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

答案 3 :(得分:1)

这应该做的工作:

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