2017-07-06 44 views
-2

的變化我有格式的幾個句子:正則表達式匹配的話

爲卡塔爾公民的簽證規定,通過放置在卡塔爾的公民的其他國家機關的行政准入限制。

英國公民的簽證要求是其他國家當局對英國公民的公民的行政限制。

白俄羅斯公民的簽證要求是由其他國家當局對白俄羅斯公民施加的行政入境限制。

我只想匹配上述句子中的「國名」公民。正如你所看到的,其中一些以「中國公民」結束。其他國家繼續存在,一些國家有像「the」這樣的詞,有些國家有兩個或更多的詞像「英國」。

如何在上述所有聲明及其變體中編寫與「COUNTRY_NAME的公民」相匹配的(pythonic)正則表達式?

+0

這對於正則表達式來說當然不是一件容易的事情。 –

+0

我對'regex'並不熟悉,在我看來,由於國家可以有不止一個單詞,並且它們可能不全是大寫字母,所以最好是構建一個包含所有單詞的列表國家的英文名稱,然後進行篩選。 –

+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的大寫字母和字母。