在 Python 中使用正则表达式查找和替换精确缩写的匹配

问题描述 投票:0回答:1

我有一个

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'

这个问题的正则表达式模式是什么?

python python-3.x regex pattern-matching python-re
1个回答
0
投票

这是固定代码:

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
© www.soinside.com 2019 - 2024. All rights reserved.