2

我正在尝试在描述行中创建一系列匹配的内容。所以我可以稍后在我的脚本中忽略它们。下面是我一直在处理的示例脚本。

基本上我正在尝试获取一堆字符串并将其与一堆其他字符串匹配。

又名:asdf 或 asfs 或 wrtw in string = true 如果不打印,则继续执行脚本。

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)

谢谢

4

2 回答 2

3

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

您测试列表中的第一项。如果不匹配,您将转到else并返回"WIN!"而不测试列表中的任何其他术语。

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

[编辑:我看到你编辑了问题以包含正则表达式,所以我会将答案编辑回re上下文......]请注意,如果你想给它实际的正则表达式,你应该使用re.search而不是因为只在开头匹配线。re.matchre.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)

在这种情况下,它将遍历每个单词,如果找到匹配项则退出,但如果没有(完成循环而不返回任何内容),那么它最终会返回"WIN"

于 2013-10-19T03:40:02.967 回答
1

我认为使用单个正则表达式或一组正则表达式会好得多,如果只有一个大到无法编译的话。就像是:

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

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

注意:“ignorelist”中的模式如果使用或“|”,则应该用括号括起来 操作员。

于 2013-10-19T12:27:12.997 回答