我必须读一行我在寻找像
这样的模式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+'
答案 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)))