正则表达式匹配关键词列表

时间:2015-10-21 20:31:52

标签: python regex

我有一个单词列表,用于标识文档的特定部分。关键词的使用方式可能有所不同。然而,这些关键词与文档文本混合在一起,我只知道这样做的基本方法。

一些示例关键词是评估,计划,家族史,现行药物,程序,过敏等等......

这里有一些示例文本:

 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查找术语列表(不区分大小写)?

1 个答案:

答案 0 :(得分:2)

你拥有的东西应该相当于

.*\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

我尝试用字边界做但却放弃了。老实说,你可以用更简单的正则表达式计算单词数量。不要使用正则表达式,除非他们真正感觉适合任务:一般来说代码更强大,而且通常更容易。