私はまだカバーする方法がわからない特別な使用例があります。私はfield_name/field_lengthに基づいて文字列を解剖したい。そのために私は次のような正規表現を定義します:名前付きグループと代入を使用してPython正規表現で文字列を解読する
'(?P<%s>.{%d})' % (field_name, field_length)
これをすべてのフィールドについて繰り返します。
私はまた、各フィールドの右にあるスペースを削除する正規表現を持っている:
self.re_remove_spaces = re.compile(' *$')
私はこのような各フィールドを取得することができますこの方法:
def dissect(self, str):
data = { }
m = self.compiled.search(str)
for field_name in self.fields:
value = m.group_name(field_name)
value = re.sub(self.re_remove_spaces, '', value)
data[field_name] = value
return data
私は、この処理を実行する必要があります何百万という文字列なので、効率的でなければなりません。
compiled.search
の代わりにcompiled.sub
を使用して、解剖+空間の除去を1回のステップで実行することをお勧めしますが、これを行う方法はわかりません。
具体的には、私の質問は:
どのように私はPythonの正規表現で指定されたグループと組み合わせ正規表現置換を行うのですか?
''(?<%s>。%d)'%...'は ''(? .12)''のようになりますが、有効なPython正規表現ではありません。 –
interjay
申し訳ありません、修正:Pと{}が見つかりませんでした。私はまだこれをテストしているので、より多くのバグが存在する可能性があります。 – dangonfast