我有一个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'
这个问题的正则表达式模式是什么?
1条答案
按热度按时间uqzxnwby1#
下面是固定代码:
参见Python demo。输出量:
备注:
circa
,我将('ca.' , ' circa ')
添加到REPLACEMENTS
字典中r'\b(?:' + '|'.join(map(re.escape, REPLACEMENTS.keys())) + r')(?!\B\w)'
构建:\b
在开始匹配一个词的边界map(re.escape, REPLACEMENTS.keys())
转义正则表达式中使用的每个键(点需要转义以匹配文字点).
结尾(我想可能还有其他以单词字符结尾的缩写),因此您不能依赖\b
,但可以使用adaptive word boundary。(?!\B\w)
确保如果找到的键以单词char结尾,则存在单词边界。