text = "One sentence with one (two) three, but mostly one. And twos."
所望の結果を単語を交換:A sentence with A (B) C, but mostly A. And twos.
辞書に正確に一致することにより、文字列に
言葉はlookup_dictの正確な一致に応じて交換する必要があります。したがって、2つののの2つのは、単語に追加の文字があるため、置き換えてはいけません。スペース、カンマ、小括弧、ピリオドの隣の単語は置き換えてください。
lookup_dict = {'var': ["one", "two", "three"]}
match_dict = {'var': ["A", "B", "C"]}
var_dict = {}
for i,v in enumerate(lookup_dict['var']):
var_dict[v] = match_dict['var'][i]
xpattern = re.compile('|'.join(var_dict.keys()))
result = xpattern.sub(lambda x: var_dict[x.group()], text.lower())
結果:A sentence with A (B) C, but mostly A. and Bs.
私は辞書に単語+隣接する文字のすべての組み合わせを追加することなく、所望の出力を達成することはできますか?これは、不必要に複雑なようだ:
lookup_dict = {'var':['one ', 'one,', '(one)', 'one.', 'two ', 'two,', '(two)', 'two.', 'three ', 'three,', '(three)' 'three.']
...
result = xpattern.sub(lambda x: var_dict[x.group()] if x.group() in lookup_dict['var'] else x.group(), text.lower())
単語境界の使用を検討しましたか? –
'one'、' two'などが非単語の文字で始まったり、終わったりする場合は、単語の境界ではなく、見た目に行きます。 '' var_dict.keys()])+ r '')の中のxに対して、 'xpattern = re.compile(?"(?<!\ w) ?!\ w) ")' –