在python中的re.match中使用变量

时间:2013-10-19 03:33:47

标签: python regex if-statement for-loop

我正在尝试在描述行中创建要匹配的数组。所以我可以稍后在我的脚本中忽略它们。下面是我一直在研究的示例脚本。

基本上我正在尝试使用一堆字符串并将其与一堆其他字符串进行匹配。

AKA:  string = true中的asdf或asfs或wrtw继续使用脚本  如果不打印这个。

import re

ignorelist = ['^test', '(.*)set']

def guess(a):
     for ignore in ignorelist:
             if re.match(ignore, a):
                     return('LOSE!')
             else:
                     return('WIN!')

a = raw_input('Take a guess: ')
print guess(a)

由于

2 个答案:

答案 0 :(得分:3)

你有一点逻辑/流量问题。

您测试列表中的第一个字词。如果不匹配,则转到else并返回"WIN!",而不测试列表中的任何其他字词。

(另外,ignorelist在函数之外。)

[编辑:我看到您编辑了问题以包含正则表达式,因此我将答案编辑回re上下文...] 请注意,您应该使用{{ 1}}而不是re.search如果你想给它真正的正则表达式,因为re.match只匹配行的开头。

根据您希望程序的工作方式,有无数种方法可以改变这种情况。

我会沿着这些方向重新编写re.match。 (您也可以将guess放在函数中而不是传递它。):

ignorelist

在这种情况下,它将循环遍历每个单词,如果找到匹配则退出,但如果没有(完成循环而不返回任何内容),则它将最终返回ignorelist = [r'^test', r'[abc]set'] def guess(a,il): for reg in il: if re.search(reg,a): return "LOSE" return "WIN" a = raw_input() print guess(a,ignorelist)

答案 1 :(得分:1)

我认为使用单个正则表达式或者一组正则表达式会好得多,如果只有一个正在编译。类似的东西:

GUESSER = re.compile('|'.join(ignorelist))

def guess(a):
    if GUESSER.search(a):
        return('WIN!')
    else:
        return('LOSE!')

注意:如果“ignorelist”中的模式使用“或”,则应将其括在一对括号中操作