私は単一の文字b、c、dを持っています....辞書と正規表現ライブラリのre.subおよびmultiple_replace関数を使用してランダムな単語に置き換えました。つまり、b = 本、c = 料理人、d = ドゥークなど.
ただし、bb、cc、または dd の繰り返しがある場合... 代わりに、これらの文字を別のものとして出力できるようにしたいのですが、すべての 2 文字が bb= blah、cc = blah のような 1 つの単語に相当します。 , dd= blah の後に文字が続きます。したがって、bb=blahb、cc=blahc、dd=blahd です。
どうやってやるの?
私が試してみました:
print multiple_replace(dict, re.sub(r'([bcdfghjklmnpqrstvwxyz])\1', r'science\1', text, flags = re.I))
ここで、dict は単語 b= book、c= cook、d=dook などを含む辞書です。
re.sub 機能には、母音以外のすべての二重文字が含まれており、科学という単語とその文字に置き換えられます。テキストは、辞書内で見つかった文字列置換に変換したい入力文字列を表します。
したがって、出力を bb =scienceb, cc=sciencec にしたいのですが、現在抱えている問題は、文字列「science」を出力する代わりに、必要なことです。辞書内で見つかった単語 Science の文字列置換を出力します。たとえば、"s" : "sook"、"c" : "cook"、"i" : "i"、"n" : "nook"、
そのため、テキスト文字列の sookcookiecooknooke に置き換えられる 2 文字の単語が出力されます。何故ですか?どうすれば修正できますか?
混乱している場合は、お知らせください。どうもありがとう!
編集:
ここに私が取り組んでいるコードがあります:
import re
def multiple_replace(dict, text):
# Create a regular expression from the dictionary keys
regex = re.compile("(%s)" % "|".join(map(re.escape, dict.keys())))
# For each match, look-up corresponding value in dictionary
return regex.sub(lambda mo: dict[mo.string[mo.start():mo.end()]], text)
if __name__ == "__main__":
text = "This is my first regex python example yahooa yahoouuee bbbiirdd"
dict = {
"a" : "a",
"b" : "book",
"c" : "cook",
"d" : "dook",
"e" : "e",
"f" : "fook",
"g" : "gook",
"h" : "hook",
"i" : "i",
"j" : "jook",
"k" : "kook",
"l" : "look",
"m" : "mook",
"n" : "nook",
"o" : "o",
"p" : "pook",
"q" : "qook",
"r" : "rook",
"s" : "sook",
"t" : "took",
"u" : "u",
"v" : "vook",
"w" : "wook",
"x" : "xook",
"y" : "yook",
"z" : "zook",
}
print multiple_replace(dict, re.sub(r'([bcdfghjklmnpqrstvwxyz])\1', r'science\1', text, flags = re.I))