我试图从文件中加载一个正则表达式模式列表,我希望将每个正则表达式条目拉入一个数组,以后可以用来匹配传入的文本模式,然后触发一个基于它们的行动。
我已经掌握了re.search()的工作,但是如何从文件中加载正则表达式模式,然后使用re.search扫描从文件中提取的各种正则表达式模式(争论?
答案 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!!'