0

我最近一直在使用正则表达式,我正在寻找一种在不得不使用许多正则表达式时改进流控制的方法。

这就是事情通常的样子。

result = re.match(string, 'C:')
if result:
    #do stuff here
else:
    result2 = re.match(string, 'something else')

if result2:
    #do more stuff
else:
    result3 = re.match(string, 'and again')

 .
 .
 .

我真正想要的是拥有类似的东西。

MatchAndDo(string, regex_list, function_pointer_list)

或者更好的做事方式。

4

1 回答 1

1

你可以用

patterns = (
    #(<pattern>, <function>, <do_continue>)
    ('ab', lambda a: a, True),
    ('abc', lambda a: a, False),
)

def MatchAndDo(string, patterns):
    for p in patterns:
        res = re.match(p[0], string)
        if res is None:
            continue

        print "Matched '{}'".format(p[0])
        p[1](p[0]) # Do stuff
        if not p[2]:
            return

MatchAndDo('abc', patterns)

请注意,re.match()匹配字符串http://docs.python.org/2.7/library/re.html?highlight=re.match#re.match开头的字符

于 2013-07-18T22:44:59.543 回答