0

次のようなパターンを探している行を読む必要があります

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

以下は必要なパターンを見つけました

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

上記のコードでは、正規表現パターンをハードコーディングしましたwidth

4つの変数すべてを配列に格納しました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 に答える