【发布时间】:2017-02-24 15:54:07
【问题描述】:
由于某种原因,当在一个很大的 unicode 字符串上使用 re.sub 时,该函数只查找和替换匹配的前半部分,而忽略第二部分。 但是,当我减小字符串的大小(删除前半部分)时,它可以正常工作。 当我在 ASCII 字符串上测试时,它也可以正常工作。
谁能帮我解决问题?
代码:
s = u"Очень Длинная Строка. Очень Длинная Строка. Очень Длинная Строка. Очень Длинная Строка. Очень Длинная Строка. Очень Длинная Строка. Очень Длинная Строка. Очень Длинная Строка. Очень Длинная Строка. Очень Длинная Строка. Очень Длинная Строка. Очень Длинная Строка. Очень Длинная Строка. Очень Длинная Строка."
# Find all capital letters, and add '!' before them
print re.sub(ur"([\u0410-\u042f])", ur"!\1", s, re.UNICODE)
结果:
!Очень !Длинная !Строка. !Очень !Длинная !Строка. !Очень !Длинная !Строка. !Очень !Длинная !Строка. !Очень !Длинная !Строка. !Очень !Длинная !Строка. !Очень !Длинная !Строка. !Очень !Длинная !Строка. !Очень !Длинная !Строка. !Очень !Длинная !Строка. !Очень !Длинная Строка. Очень Длинная Строка. Очень Длинная Строка. Очень Длинная Строка.
如您所见,字符串的最后一部分没有被处理。
更新:
正如 RomanPerekhrest 在下面发现的那样,当我们添加其他标志(例如 re.MULTILINE、re.VERBOSE 等)时,该函数会替换字符串的更大部分,但仍然不完整。
【问题讨论】:
-
去掉
re.UNICODE就可以了。 -
哎呀,Python3和Python 2的字节串都没有问题……会不会是unicode层的Python 2 bug?
-
这是您代码中的错误。 this one
标签: python regex string unicode