gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 03:11:35 31 4
gpt4 key购买 nike

我正在使用以下包含 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com