【发布时间】:2020-11-13 17:21:29
【问题描述】:
我正在尝试使用自定义词典将德语单词转换为英语。 在下面的代码中,仅当匹配单词的后缀或前缀落在字符中时才会发生替换
[,\/!?()_1234567890-=+."""' "]
例如:
Mein 应该首先转换,但不要在 MeinName 中转换,因为前缀和后缀不是上面提到的字符。如果有 _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
【问题讨论】:
-
您的预期输出与您的规则不匹配:
is234在is之后有一个2,因此,应将其替换为is。输出中_在du之前在哪里消失? -
现在,试试
rx = r'(?:{})(?=[,/!?()_0-9\-=+."\s\'])'.format('|'.join(map(re.escape, replacements.keys()))) -
@wiktor 编辑了预期的输出。
-
好的,ideone.com/3Rn0m1 对你有用吗?
-
它的工作。谢谢@Wiktor Stribiżew