我试图使一些代码更具可扩展性。作为处理的一部分,我希望导入一些正则表达式模式对象。在生产过程中代码执行之前我不想知道有多少 - 我会为它们使用标准名称。
start_0 = re.compile(r"some start pattern")
start_1 = re.compile(r"some other start pattern")
stop_0 = re.compile(r"some stop pattern")
stop_1 = re.compile(r"some other stop pattern")
.
.
.
stop_n = re.compile(r"(some nth stop pattern")
我想根据名称模式
使用所有正则表达式到目前为止,我所做的只是保存了一个正则表达式列表,然后从IDLE shell导入它们。这很好,如果我使用dir功能,我可以看到它们,所以我可以通过名称调用它们,但我想用它们调用它们生成器进程
for regex in my_regex_list.py:
do_something with the regex
是否可以在没有大量混乱的情况下获取名称?
答案 0 :(得分:1)
我认为正确的答案是:你不应该。
任何模块都应该有一组可以导入的稳定名称。关键是如果您不知道要导入的名称,为什么要首先公开它?
但是,您可以创建一些可以导入的数据结构。
#mymodule.py
regex_list = [
re.compile(r"some start pattern"),
re.compile(r"some other start pattern"),
...
]
#main.py
from mymodule import regex_list
for regex in regex_list:
...
如果您想保留名称,则可以为其创建dict
。如果您想保留名称和顺序,可以使用collections.OrderedDict
。
答案 1 :(得分:1)
不要将原始正则表达式放在单独的变量中,只需将它们放在一个列表中:
regex_list = [
{start: r"some start pattern", end: r"some stop pattern"},
{start: r"some other start pattern", end: r"some other end pattern"},
...
]
for regexes in regex_list:
do someting with regexes.start and regexes.end