[英]How to extract 3 and or more words after a specific word
我一直在尝试在Diagnosis:
或diagnosis:
之后提取 3 个或更多单词,但无济于事。
这是我一直在尝试的代码:
'diagnosis: \s+((?:\w+(?:\s+|$)){2})'
打印为空。
我已经设法使这段代码工作:
"Diagnosis: (\w+)",
"diagnosis: (\w+)",
这在Diagnosis:
或diagnosis:
之后给了我直接的词。 我怎样才能让它适用于 3 个或更多单词?
#@title Extract Diagnosis { form-width: "20%" }
def extract_Diagnosis(clinical_information):
PATTERNS = [
"diagnosis: (\w+).",
"Diagnosis: (\w+).",
]
for pattern in PATTERNS:
matches = re.findall(pattern, clinical_information)
if len(matches) > 0:
break
Diagnosis = ''.join([t for t in matches if t.isalpha()])
return Diagnosis
for index, text in enumerate(texts):
print(extract_Diagnosis(text))
print("#"*79, index)
我正在寻找的是 diagnosis: 或 Diagnosis: 之后出现的 3 个或更多单词,在 20 个 pdf 中。 我已经将 pdf 转为文本并提取了“诊断:”所在的段落(临床信息)。
好的,一个新的答案更侧重于代码问题而不是正则表达式问题。 因此,首先,需要通过删除初始空格字符并将2
更改为3
来稍微调整您的正则表达式:
diagnosis:\s+((?:\w+(?:\s+|$)){3})
您的代码有很多问题。 这是您的代码的一个版本,虽然它可能不完全符合您的要求:
import re
def extract_Diagnosis(clinical_information):
PATTERNS = [r"diagnosis:\s+((?:\w+(?:\s+|$)){3})"]
matches = []
for pattern in PATTERNS:
matches = re.findall(pattern, clinical_information)
if len(matches) > 0:
break
Diagnosis = ''.join([t for t in matches])
return Diagnosis
texts = ["diagnosis: a b c blah blah blah diagnosis: asdf asdf asdf x x x "]
for index, text in enumerate(texts):
print(extract_Diagnosis(text))
print("#"*79, index)
结果:
a b c asdf asdf asdf.
以下是我用您的代码修复的问题:
r
。 这在 Python 中指定了一个“原始字符串”。您需要执行此操作或将反斜杠加倍。if t.isalpha()
过滤结果。 根据您的表达式,这将始终为False
,因为您匹配的内容将始终包含空格和单词字符。 无论如何,我认为没有理由进行此测试,因为您确切地知道您得到的是什么,因为您得到的与您的正则表达式相匹配。我希望这有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.