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)

文字列http://docs.python.org/2.7/library/re.html?highlight=re.match#re.matchre.match()の先頭の文字に一致することに注意してください

于 2013-07-18T22:44:59.543 に答える