Python正则表达式首选项,如果多个匹配

时间:2017-11-21 19:13:46

标签: python regex

我正在搜索字符串中的城市名称:

mystring = 'SDM\Austin'
city_search = r'(SD|Austin)'
mo_city = re.search(city_search,mystring,re.IGNORECASE)
city = mo_city.group(1)
print(city)

这会将城市作为' SD'。

返回

有没有办法让Austin'偏好?

将订单切换为(Austin | SD)并不起作用。

答案与How can I find all matches to a regular expression in Python?相同,但用例略有不同,因为首选匹配。

2 个答案:

答案 0 :(得分:1)

您正在使用re.search,而是使用returns lists 全部 matches的{​​{1}}。< / p>

因此,如果您将代码修改为:

mystring = 'SDM\Austin'
city_search = r'(SD|Austin)'
mo_city = re.findall(city_search,mystring,re.IGNORECASE)
city = mo_city[1]
print(city)

它将工作查找,输出:

Austin

所以,mo_citylist['SD', 'Austin'],因为我们希望assign第二个elementAustin)到{{ 1}},我们使用city索引1

答案 1 :(得分:1)

您已经在这里找到了一个很好的答案(使用findall代替search使用正则表达式)。这是另一种替代方法(不使用正则表达式),它根据字符串列表检查字符串并返回匹配项。根据您提供的示例代码,这应该适合您,并且可能比正则表达式方法更容易。

代码

See code in use here

list = ['SD', 'Austin']
s = 'SDM\Austin'
for l in list:
    if l in s:
        print '"{}" exists in "{}"'.format(l, s);