[英]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)
在左侧,您可以匹配任何单词字符\\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.