python:创建原始变量字符串

时间:2013-03-28 17:49:10

标签: python

我必须读一行我在寻找像

这样的模式
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 个答案:

答案 0 :(得分:1)

我会做以下事情:

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)

答案 1 :(得分:1)

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

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

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

答案 2 :(得分: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', ...]]

答案 3 :(得分:0)

此任务不需要正则表达式。请参阅其他答案。

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

import re

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

myre = r'({})\s*:\s*(\d+)'.format('|'.join(map(re.escape, key_word)))