python - 仅当前缀和后缀匹配时,Python 才使用 re.sub 替换字符串
问题描述
我正在尝试使用自定义词典将德语单词转换为英语。在下面的代码中,仅当匹配单词的后缀或前缀落在字符中时才会发生替换
[,\/!?()_1234567890-=+."""' "]
例如:
Mein
应该首先转换但不转换,MeinName
因为前缀和后缀不是上面提到的字符。如果有单个单词 like_Mein
或Mein.
需要转换。
import re
str = "Mein ,Name, ist John, Wo23 bist+ ,_du? , MeinName "
replacements = { 'Mein':'my', 'ist':'is', 'Wo':'where', 'bist':'are', 'du':'you', 'is':'iis'}
re.sub('({})'.format('|'.join(map(re.escape, replacements.keys()))), lambda m: replacements[m.group()], str)
预期输出:
my ,name,is John,where23 are+,_you? ,MeinName
解决方案
您可以使用
import re
s = "Mein ,Name, ist John, Wo23 bist+ ,_du? , MeinName "
replacements = { "Mein": "my", "ist": "is", "Wo":"where", "bist":"are", "du":"you", "is" :"iis"}
rx = r'(?:{})(?=[,/!?()_0-9\-=+."\s\'])'.format('|'.join(map(re.escape, replacements.keys())))
print (rx)
print ( re.sub(rx, lambda m: replacements[m.group()], s) )
# => my ,Name, is John, where23 are+ ,_you? , MeinName
请参阅Python 演示。
正则表达式看起来像
(?:Mein|ist|Wo|bist|du|is)(?=[,/!?()_0-9\-=+."\s\'])
请参阅正则表达式演示。细节:
(?:Mein|ist|Wo|bist|du|is)
- 替代字符串之一(?=[,/!?()_0-9\-=+."\s\'])
- 正向前瞻匹配紧随其后的位置,,
,/
,!
, ,?
,)
,(
,_
, 一个数字,-
,=
,+
,.
,"
, 空格和'
.
推荐阅读
- c# - 重复子串 N 次
- android - Google Play 服务登录问题 - SHA1 指纹问题
- php - 使用 array_search 函数时数组中的第一个值重复
- dask - 如何在与提交它的机器不同的机器上获得 Dask 计算的结果?
- mysql - 将 SQL 查询中的日期转换为仅显示月份
- angular - Angular 7中的combineLatest未执行
- c# - 下载文件时浏览器不显示进度条
- python - 如何导入 xml.dom.mindom
- angularjs - 在 AngularJS 中不使用引导程序的表
- android - 2019 年 1 月 29 日之后创建的带有 API KEY 的 Android 地点选择器