regex - 使用正则表达式查找 ü(带有变音符号的 u)

标签 regex python-2.7 unicode utf-8 diacritics

我正在使用以下包含 letter ü 的文本片段:

test für fur test

代码如下:

import re

for m in re.finditer(r, line, re.IGNORECASE | re.UNICODE):
    print 'match:  ', m.group(0)
    print 'offset: ', m.start()

还有三个正则表达式:

r = ur'\bf(\u0075)r\b'    # finds 'fur', as expected
r = ur'\bf(\xc3\xbc)r\b'  # finds 'für', as expected
r = ur'\bf(\u00FC)r\b'    # does not find 'für'

表达式#1 和#3 相似;唯一的区别是 Unicode 点(uü)。为什么 #3 不起作用?

我可以使用#2,但它的可读性较差。

最佳答案

这是我的测试结果。

>>> print re.findall(ur'\bf(\u0075)r\b', "test für fur test", re.I|re.U)
['u']
>>> print re.findall(ur'\bf(\xc3\xbc)r\b', "test für fur test", re.I|re.U)
['\xc3\xbc']
>>> print re.findall(ur'\bf(\u00FC)r\b', "test für fur test", re.I|re.U)
[]

这些与您的结果完全匹配。我注意到第二种情况的匹配项是 ['\xc3\xbc'],这让我大吃一惊。 "test für fur test" 是一个非 unicode 字符串。

这是我使用 unicode 字符串进行的第二组测试。

>>> print re.findall(ur'\bf(\u0075)r\b', u"test für fur test", re.I|re.U)
[u'u']
>>> print re.findall(ur'\bf(\xc3\xbc)r\b', u"test für fur test", re.I|re.U)
[]
>>> print re.findall(ur'\bf(\u00FC)r\b', u"test für fur test", re.I|re.U)
[u'\xfc']

正则表达式匹配字符串中的二进制表示。所以unicode字符串匹配unicode字符,非unicode字符串匹配UTF-8编码的字符。


如果您无法选择要使用的 sting 类型,您始终可以使用 unicode()

>>> print re.findall(ur'\bf(\u00FC)r\b', unicode("test für fur test", "utf-8"), re.I|re.U)
[u'\xfc']

在你的情况下

for m in regex.finditer(r, unicode(line, "utf-8"), regex.IGNORECASE | regex.UNICODE):
    print 'match:  ', m.group(0)
    print 'offset: ', m.start()

注意

根据 .py 文件的文件编码,ur'\bf(ü)r\b' 也应该有效。

>>> print re.findall(ur'\bf(ü)r\b', u"test für fur test", re.I|re.U)
[u'\xfc']

关于regex - 使用正则表达式查找 ü(带有变音符号的 u),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36715487/

相关文章:

ruby - 排除括号内字符的正则表达式匹配

python - 通过 pip 安装 pygame

linux - 用于检查服务是否正在运行的 Python 代码。?

unicode - 标准化 unicode

c++ - 如何检查是否转换为 wchar_t "failed"

包含\x 的格式不正确的字符串的 Python 问题

php - preg_replace 删除样式文本/css 标签

python - 用re解析python文件

php将以小写字母结尾的单词末尾的逗号替换为冒号

python - 在 Python (2.7.3) 中,如果 str(x) 中的任何字符在 str(y) 中(或 str(y) 在 str(x) 中),我如何编写一个函数来回答?