0

我必须阅读我在其中寻找模式的行

width:40
height :50
left : 60
right: 70

以下找到了所需的模式

line = "width:40"
match = re.search(r'width\s*:\s*\d+', line)

在上面的代码中,我已经硬编码了正则表达式模式width

我已将所有四个变量存储在数组中key_word = ['width', 'height', 'left', 'right']

我想搜索所有这些变量的模式,比如

for key in key_word:
        match = re.search(key, line)

问题是我怎样才能使它成为key一个原始字符串,这将是一个模式

r'width\s*:\s*\d+'
r'height\s*:\s*\d+'
r'left\s*:\s*\d+'
r'right\s*:\s*\d+'
4

4 回答 4

2

我会做类似以下的事情:

key_word = ['width', 'height', 'left', 'right']
regex_template = r'{}\s*:\s*\d+'
for key in key_word:
    print re.search(regex_template.format(key), line)
于 2013-03-28T17:54:28.620 回答
1

您也可以只使用通用正则表达式:

matches = re.findall(r'(.*?)\s*:\s*(\d+)', text)

matches将是一个(key, value)元组列表。

于 2013-03-28T17:55:44.897 回答
0

为什么不使用split(或partition)和strip

for line in lines:
    key, sep, value = line.partition(':')
    key = key.strip()
    value = value.strip()

如果你真的需要使用正则表达式,你也可以格式化它们:

r'%s\s*:\s*\d+' % 'width'

或者对于每个键:

regexes = [r'%s\s*:\s*\d+' % key for key in ['width', 'height', ...]]
于 2013-03-28T17:51:36.907 回答
0

此任务不需要正则表达式。查看其他答案。

但是,如果您坚持,您可以使用以下方法动态创建一个re.escape

import re

key_word = ['width', 'height', 'left', 'right']

myre = r'({})\s*:\s*(\d+)'.format('|'.join(map(re.escape, key_word)))
于 2013-03-28T18:00:51.847 回答