使用 unicode 替换特殊字符

replace special characters using unicode

如何根据德语拼写将双引号替换为风格正确的引号(„ U+201e 或 “ U+201c )。

示例:

zitat = 'Laut Durkheim ist ein "soziologischer Tatbestand jede mehr oder weniger [...] unabhängiges Eigenleben besitzt"'

我试过代码

import re
zitatnew = re.sub(r'"', r'[u+201e]', zitat)
print(zitatnew)

Laut Durkheim ist ein [u+201e]soziologischer Tatbestand jede mehr oder weniger [...] unabhängiges Eigenleben besitzt[u+201e]

如何使用 unicode 将双引号替换为正确的双引号?

也许你们中的一位可以帮助我。 P.S。对不起我的英语不好!

我猜你正在找这个

re.sub(r'"', u"\u201E", zitat)

或更合适的

s = 'Laut Durkheim ist ein "soziologischer Tatbestand jede mehr oder weniger [...] unabhängiges Eigenleben besitzt"'
# substitute the opening quote
output = re.sub('\B"', u"\u201C", s)
# substitute the closing quote as well
output = re.sub('"\B', u"\u201D", output)

>>> output
'Laut Durkheim ist ein “soziologischer Tatbestand jede mehr oder weniger [...] unabhängiges Eigenleben besitzt”'

这给出了

'Laut Durkheim ist ein “soziologischer Tatbestand jede mehr oder weniger [...] unabhängiges Eigenleben besitzt”'

您可以在字符串中有 " 时进行迭代,并在每次迭代中替换一对引号:

zitat = 'Laut Durkheim ist ein "soziologischer Tatbestand jede mehr oder weniger [...] unabhängiges Eigenleben besitzt"'

print(f"Before replace: {zitat}")

while "\"" in zitat:
    zitat = zitat.replace("\"", "\u201e", 1)
    zitat = zitat.replace("\"", "\u201c", 1)

print(f"After replace: {zitat}")

1 作为 replace() 中的第三个参数对于仅替换 " 的第一个参数很重要。这应该为任何具有偶数 ".

的字符串提供正确的输出

输出:

Before replace: Laut Durkheim ist ein "soziologischer Tatbestand jede mehr oder weniger [...] unabhängiges Eigenleben besitzt"
After replace: Laut Durkheim ist ein „soziologischer Tatbestand jede mehr oder weniger [...] unabhängiges Eigenleben besitzt“

re.sub比一遍又一遍的替换更高效,而且有了替换功能可以一次完成:


import re
s = '"this" "is" "a" "test" "string"'
s = re.sub(r'(\b")|("\b)',lambda m: '\u201c' if m.group(1) else '\u201e',s)
print(s)
„this“ „is“ „a“ „test“ „string“