正则表达式匹配单词的变化

时间:2017-07-06 22:02:26

标签: python regex string

我有几种格式的句子:

  

卡塔尔公民的签证要求是其他州的当局对卡塔尔公民的行政准入限制。

     

英国公民的签证要求是其他州的当局对英国公民的行政准入限制。

     

白俄罗斯公民的签证要求是其他州当局对白俄罗斯公民施加的行政准入限制。

我只想匹配[国名]和#34;的公民。在上面的句子中。正如你所看到的,其中一些以中国公民的时期结束。"其他人继续,有些人有像#34;"有些国家有两个或两个以上的词,比如"联合王国"。

我如何编写一个与“COUNTRY_NAME”的公民相匹配的(pythonic)正则表达式"在上述所有陈述及其变体中?

1 个答案:

答案 0 :(得分:0)

使用regex模块,以便我们可以使用Unicode categories

我们假设国名是多个连续的单词,每个单词都以大写字母开头,并用一定数量的空格分隔。如果你不能做出这个假设,那就按照你的意愿调整它。如果您已有国家/地区列表,则只需.{,40}匹配国家/地区部分(或其他一些合理限制),并检查某个国家/地区是否为子字符串。

import regex as re

text = '''Visa requirements...'''
country_pat = r'citizens of (?:the )?((?:\p{Lu}\p{L}+(?:\s*))+)'
print(country_pat.findall(text))

(?:表示我们与该部分不匹配,p{Lu}p{L}分别是Unicode大写字母和字母。