【问题标题】:Python 2.7 Correct syntax to re.match accented characters in a Unicode string?Python 2.7 正确的语法来重新匹配 Unicode 字符串中的重音字符?
【发布时间】:2014-09-28 08:52:45
【问题描述】:

我有一个带有单个参数的函数,它是一个 unicode 字符串,其中包含重音字符。我想在该字符串中找到一个或多个出现的模式并将其打印出来。

我不知道如何正确格式化模式,或正确使用 re.match 与 unicode,或提取 match.groups() 与 unicode。使用 ASCII 就容易多了。啊。

Python 2.7

sentence = "These characters, ÄÜ, are special."

def findInSentence(sentence):

    pattern = re.compile("ÄÜ", re.UNICODE)
    return re.match(sentence, pattern).groups()

【问题讨论】:

    标签: regex python-2.7 unicode


    【解决方案1】:

    正确使用 Unicode 存在许多问题:

    1. 声明源文件的编码。
    2. 以声明的编码保存文件。
    3. 使用 Unicode 字符串。

    另外,正如@M42 指出的那样正确使用re.search

    您的搜索模式中也没有groups(),因此如果匹配项存在,请使用.group(0) 打印出匹配项。

    注意re.UNICODE在这种情况下不是必需的,因为它只影响特殊匹配序列\w\W\b\B\d\D\s\S 工作并且它们没有被使用。

    # coding: utf-8
    import re
    
    sentence = u"These characters, ÄÜ, are special."
    
    def findInSentence(sentence):
        pattern = re.compile(u"ÄÜ", re.UNICODE)
        return re.search(pattern, sentence).group(0)
    
    print findInSentence(sentence)
    

    输出:

    ÄÜ
    

    【讨论】:

      【解决方案2】:

      使用re.search 代替re.match

      re.match 锚定在字符串的开头,re.search 搜索整个字符串。

      searchmatch 的语法是:

      re.search(pattern, string, flags=0)
      re.match(pattern, string, flags=0)
      

      你已经反转了模式和字符串。

      【讨论】:

      • 那行不通。我无法对字符串进行编码或使用 re.正常运行而不会出错。
      • @user1473511:交换模式和字符串,查看我的编辑。
      • sentence = "这些字符,ÄÜ,是特殊的。"此行会引发错误。
      • 谢谢。那是一个问题,但还有其他事情正在阻止控制台工作。再次感谢您。
      猜你喜欢
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 1970-01-01
      • 2015-11-05
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多