-1

次の文字列置換 Python コードを検討してください。

import re

s = 'head abc.sys!0x1234 middle defg.sys!0x1a2b tail' # this could be potentially very long

d = {'0x1234' : 'Iamshorter',
     '0x1a2b' : 'Iammuchlonger' }

pat = re.compile(r'(\w+.\w+)!(0x[\d\w]+)')

while True:
    m = pat.search(s)
    if not m:
        break
    module, addr = m.groups()
    start, end = m.span()
    s = s[:start] + '%s!%s' % (module, d[addr]) + s[end:]

print s

出力します

head abc.sys!Iamshorter middle defg.sys!Iammuchlonger tail

Pythonの正規表現の力を解き放つことができるような、より高速なPythonイディオムを探しています。re.sub() を使ってみたのですが、一致した文字列の関数として 'repl' を作るのに苦労しました。どんな提案でも大歓迎です。ありがとう。

4

1 に答える 1

0

私が持っている唯一の提案は、検索機能のオプションの「pos」パラメーターを使用して、既にチェックした文字列の部分をチェックしないようにすることです。

于 2013-03-23T00:07:10.260 に答える