繁体   English   中英

正则表达式以匹配关键字列表

[英]Regex to match a list of key words

我有一个单词列表,这些单词可以标识文档的特定部分。 关键字的使用方式可能有所不同。 但是这些关键字与文档文本融合在一起,我只知道这是一种基本的方法。

一些示例关键词将是评估,计划,家族史,当前药物,程序,过敏等,等等。

一些示例文本在这里:

 Family History
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX      
 Social History
  · No alcohol use
 Current Meds
 Allergies
  · No Known Drug Allergies      
 Vitals
 Vital Signs [Data Includes: Current Encounter] 
 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX    
    Height     Tall 
    Weight     Well Built               
Physical Exam
Lorem Ipsum is simply dummy text of the printing and typesetting industry
Lorem Ipsum has been the industry's standard dummy text ever since the
1500s, when an unknown printer took a galley of type and scrambled it to    
Assessment
History of Medication
      None
Plan
It is a long established fact that a reader will be distracted by
readable content of a page when looking at its layout. The point of using
Lorem Ipsum is that it has a more-or-less normal distribution of letters,

这是我到目前为止的工作

'.*\bPlan\b|.*\bHistory\b|.*\bMeds\b'

是否有更好的方法在Python中使用Regex查找术语列表(不区分大小写)?

你所拥有的应该等同于

.*\b(Plan|History|Meds)\b

开头有.*是多余的,只需使用search而不是match来表示可以在任何地方找到正则表达式。

但是,您可能真正想要的是确保这些单词是该行中第一个出现的“真实”事物,因此我建议:

\s*(Plan|...

说只有空格应该出现在开头,或者

\W*(Plan|...

如果您需要更大的灵活性,例如,要点( \\W表示不是文字字符)。

更新评论中的其他问题:

这是一个正则表达式的示例,该正则表达式最多只能匹配4个单词:

^(\W*\w+\W*){0,4}\W*$

测试:

for i in range(1, 6):
    print bool(re.match(r"^(\W*\w+\W*){0,4}\W*$", "abc " * i))

打印4个True和一个False

我试图用单词边界做到这一点,但放弃了。 老实说,您最好使用更简单的正则表达式来计算单词的数量。 除非使用正则表达式,否则不要使用正则表达式:通常,代码功能更强大,而且通常更容易使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM