【问题标题】:replace special characters using unicode使用 unicode 替换特殊字符
【发布时间】:2021-04-14 17:46:30
【问题描述】:

如何根据德语拼写将双引号替换为文体正确的引号(„ 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 将双引号替换为正确的引号?

也许你们中的一个可以帮助我。 附言对不起我的英语不好!

【问题讨论】:

    标签: python regex unicode


    【解决方案1】:

    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“
    

    【讨论】:

      【解决方案2】:

      我猜你正在寻找这个

      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”'

      【讨论】:

      • 从这个答案开始:如果您想获得正确的“开始”和“结束”引号,这取决于您的原始引号是跟随一些空格还是从新行开始,或者它位于行尾或后跟标点符号或空格,您可以使用以下 2 个命令:zitatnew = re.sub('(\s)"|^"', u"\\1\u201C", zitat) 后跟 zitatnew = re.sub('"([\s\.\?!])|"$', u"\u201D\\1", zitatnew)。在您的示例中,这将给出: Laut Durkheim ist ein “soziologischer Tatbestand jede mehr oder weniger [...] unabhängiges Eigenleben besitzt”
      【解决方案3】:

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

      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“
      

      【讨论】:

        猜你喜欢
        • 2021-12-23
        • 1970-01-01
        • 2020-03-16
        • 1970-01-01
        • 2014-11-03
        • 2019-09-23
        • 1970-01-01
        • 2019-05-14
        • 1970-01-01
        相关资源
        最近更新 更多