从一组字符串中重新匹配一个,结果为变量

时间:2014-08-13 10:54:39

标签: python regex

我想匹配一个可能有几个字符串之一的模式,我想知道哪些匹配。

所以我试过了:

>>> re.match(r'(test|test2|test3)','test2').group(1)
'test'

但我希望结果为test2

我怎么能这样做,不允许任何字符串并测试它是单独的?

3 个答案:

答案 0 :(得分:3)

第一场比赛获胜,所以订单很重要:

In [2]: re.match(r'(test2|test3|test)','test2').group(1)
Out[2]: 'test2'

答案 1 :(得分:1)

您可以将此概括为辅助函数,该函数通过首先放置最长匹配并自动返回已编译的正则表达式来自动准备正则表达式,例如:

import re

def match_one_of(*options):
    options = [re.escape(option) for option in options]
    options.sort(key=len, reverse=True)
    return re.compile('|'.join(options))

rx = match_one_of('test', 'test2', 'test3')
print rx.match('test2').group()
# test2

如果您已经有一个选项列表,那么:

options = ['test', 'test2', 'test3']
rx = match_one_of(*options)

答案 2 :(得分:0)

 (^test$|^test1$|^test2$)

你可以使用它。基本上添加更多精度并获得所需的结果。