私は長い文字列Sと文字列から文字列へのマップを持っていますMの中のキーはSの正規表現の結果です。私はSでfind-and-replaceを実行したいのですが、その正規表現のマッチのどれかがMのキーKの一つであるときはいつでも値M [K]に置き換えます。
これを行うために私はアクセスする必要があると思う正規表現の結果は正規表現内でマッチします。一致の結果を格納して、正規表現の外で平等をテストしようとすると、一致がどこにあるかわからなくなるため、置き換えられません。どのようにして目標を達成できますか?
例:
S = "abcd_a", regex = "[a-z]", M = {a:b}
結果: "bbcd_b"正規表現はaと一致し、bで置き換えるためです。
S = "abcd_a", regex = "[a-z]*", M = {a:b}
結果:正規表現は "abcd"にマッチします(正確に "a"でないため置き換えられません)。最後の "a"(正確に "a"なので置き換えます)のため、 "abcd_b"
回答:
回答№1は1EDIT AlanMooreの提案に感謝します。コードはよりシンプルになりました。
私はこの単純な例を解決するためにpython(2.7x)を使ってみましたが、他の言語でも実現できます。重要なことはアプローチ(アルゴリズム)です。
import re
from itertools import cycle
S = "abcd_a"
REGEX = "[a-z]"
M = {"a":"b"}
def ReplaceWithDict(pattern):
# split by match group and map the match against map dict
return "".join([M[v] if v and v in M else v for v in re.split(pattern, S)])
print ReplaceWithDict("([a-z])")
print ReplaceWithDict("([a-z]*)")
出力:
bbcd_b
abcd_b