Python:将数据从文件加载到IRC bot中

时间:2011-02-04 15:02:30

标签: python python-2.6

我试图从文件中加载一个正则表达式模式列表,我希望将每个正则表达式条目拉入一个数组,以后可以用来匹配传入的文本模式,然后触发一个基于它们的行动。

我已经掌握了re.search()的工作,但是如何从文件中加载正则表达式模式,然后使用re.search扫描从文件中提取的各种正则表达式模式(争论?

2 个答案:

答案 0 :(得分:2)

如果要在正则表达式匹配文本模式时触发操作,则可能需要将正则表达式映射到操作(假设它是对与映射在同一文件中定义的函数的引用)。假设我们在python文件rules.py中定义规则,如下所示:

mappings = [
    # (regex, action_name)
    (r'Hi ([a-z]+)!', greet),
    (r'Bye', bye),
]

def greet(msg):
    return 'Hello'

def bye(msg):
    return 'Bye'

在导入映射的main.py中,编译所有正则表达式(一次性操作以避免每次搜索重新编译它们),然后对传入的消息进行搜索。

import rules

# compile regex
compiled = dict([(re.compile(regex), action_name) for (regex, action_name) in rules.mappings])

def incoming(msg):
    for regex, action_name in compiled:
        if regex.search(msg):
            # if search is successfull, execute action
            action_function = getattr(rules, action_name)
            action(msg)

当然这取决于你想如何触发这个动作,但我希望主要原则是明确的。

答案 1 :(得分:1)

# pre-compile regexes:
with open('regex_file.txt') as f:
   regexes = [re.compile(regex.strip()) for regex in f]

# use them
for regex in regexes:
    m = regex.search(text)
    if m:
        print 'got match!!'