我有一个
REPLACEMENTS
字典,其键是我想要准确找到的字符串。然后我想用它们对应的字典值替换它们。
例如,
REPLACEMENTS = dict([('max.' , ' maximum '),
('inkl.' , ' inklusive '),
('z.b.' , ' zum beispiel '),
('ggf.', ' gegebenfalls ')])
sample_input_text = "Hallo, ggf ggf. max z.b. alpha z.b beta ca. 25 cm ca inkl. inkl. inkl"
预期产量
"Hallo, ggf gegebenfalls max zum beispiel alpha z.b beta circa 25 cm ca inklusive inklusive inkl"`
正如您所注意到的,我不想替换诸如
ggf
、ca
和 inkl
之类的单词,因为它们与字典键 ggf.
、ca.
和 inkl.
不完全匹配,因为到缺失的点。
我的尝试:
正如您在下面看到的,我得到像
'ggf ', 'max '
和 'z.b '
这样的匹配,它们与字典键不完全匹配。当我使用 re.sub
时,这些部分匹配会被空白字符替换。
import re
REPLACEMENTS = dict([('max.' , ' maximum '),
('inkl.' , ' inklusive '),
('z.b.' , ' zum beispiel '),
('ggf.', ' gegebenfalls ')])
sample_input_text = "Hallo, ggf ggf. max z.b. alpha z.b beta ca. 25 cm ca inkl. inkl. inkl"
joined = '|'.join(REPLACEMENTS.keys())
print(re.findall(joined, sample_input_text))
>> ['ggf ', 'ggf.', 'max ', 'z.b.', 'z.b ', 'inkl.', 'inkl.']
pattern = re.compile(joined)
output_text = pattern.sub(lambda m: REPLACEMENTS.get(m.group()), sample_input_text)
print(output_text)
>> 'Hallo, gegebenfalls zum beispiel alpha beta ca. 25 cm ca inklusive inklusive inkl'
这个问题的正则表达式模式是什么?
这是固定代码:
import re
REPLACEMENTS = dict([('max.' , ' maximum '),
('inkl.' , ' inklusive '),
('z.b.' , ' zum beispiel '),
('ggf.', ' gegebenfalls '),
('ca.' , ' circa ')])
sample_input_text = "Hallo, ggf ggf. max z.b. alpha z.b beta ca. 25 cm ca inkl. inkl. inkl"
joined = r'\b(?:' + '|'.join(map(re.escape, REPLACEMENTS.keys())) + r')(?!\B\w)'
print(re.findall(joined, sample_input_text))
pattern = re.compile(joined)
output_text = pattern.sub(lambda m: REPLACEMENTS.get(m.group()), sample_input_text)
print(output_text)
请参阅 Python 演示。输出:
Hallo, ggf gegebenfalls max zum beispiel alpha z.b beta circa 25 cm ca inklusive inklusive inkl