【问题标题】:How to match umlauts with regular expressions? [duplicate]如何将变音符号与正则表达式匹配? [复制]
【发布时间】:2016-09-09 16:50:50
【问题描述】:

在德语文本中,变音符号 (ä, ü, ö) 和 eszett (ß) 是常规字母,但它们似乎没有被 \w 特殊字符覆盖:

In [1]: re.match('(\w+)', 'Straße').groups()
Out[1]: ('Stra',)

re.UNICODE 标志传递给re.match 不会改变任何东西。

除了[a-zA-ZäüöÄÜÖß]+之外,还有什么更好的方法来匹配一个完整的单词?

【问题讨论】:

  • 是 Python 2 还是 3?
  • @WiktorStribiżew 2
  • 我无法复制:请参阅re.match(ur'(\w+)', u'Straße', flags=re.U).group(1).encode("utf8"),它会打印出Straße。也许您只是错过了u"" 前缀?当您通过 re.U 标志时,\w 实际上涵盖了所有 Unicode 字母。
  • @WiktorStribiżew 您应该将其发布为答案。这就是答案。当我使用他的代码时,我得到与@elpres 相同的结果。它肯定需要u 前缀。
  • @WiktorStribiżew 没错,u'' 前缀确实解决了问题。

标签: python regex python-2.x


【解决方案1】:

由于使用的是python 2,所以需要使用unicode字符串:

print re.match(ur'(\w+)',u'Straße',re.UNICODE).groups()[0]
Straße

【讨论】:

  • 您不需要u'(\w+)' 中的u,但它并没有什么坏处。
  • 你是对的,当同时存在 u'' 字符串和 re.UNICODE 标志时,它可以工作。谢谢!
  • 提示:在定义正则表达式模式时使用原始字符串文字。
  • 是的,这是真的。我很着急,在这种情况下并不重要。
猜你喜欢
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
相关资源
最近更新 更多