【发布时间】:2017-11-08 07:37:29
【问题描述】:
所需的任务是将v 替换为对应的u 变音符号。
我可以这样做:
>>> replacements = {'v':'u', u'v̄':u'ǖ', u'v́':u'ǘ', u'v̌':u'ǚ', u'v̀':u'ǜ'}
>>> s = u'lv́'
>>> for v, u in replacements.items():
... s = s.replace(v, u)
...
>>> s
'lǘ'
但是当我用str.maketrans 尝试它时,它会抛出一个ValueError:
>>> str.maketrans({'v':'u', u'v̄':u'ǖ', u'v́':u'ǘ', u'v̌':u'ǚ', u'v̀':u'ǜ'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: string keys in translate table must be of length 1
是否可以将str.maketrans 和str.tranlsate 用于unicode?
如果不是,实现所需输出的合适的单个正则表达式替换是什么?或者也不可能?
【问题讨论】:
-
我认为
maketrans不会在这里工作。我认为单个正则表达式也不会真正起作用。 (您可以创建一个为每个替换调用一个函数,但这似乎是一个奇怪的解决方案。)您的原始代码有什么问题? -
无论原始字符串中是否出现任何形式的“v”,原始代码都会进行5次操作。我认为
str.maketrans和str.translate是可能的,因为它可以正常工作于非 unicode 字符串。 -
我相信
str.maketrans可以很好地与 unicode 配合使用,但它仅在映射的“from”端包含长度为 1 的字符串时才有效。
标签: regex string python-3.x unicode translate