繁体   English   中英

Python中的正则表达式和Unicode:sub和findall的区别

[英]Regular expressions and Unicode in Python: difference between sub and findall

我很难找出我的 Python (2.7) 脚本中的错误。 我在识别特殊字符时使用 sub 和 findall 有所不同。

这是代码:

>>> re.sub(ur"[^-' ().,\w]+", '' , u'Castañeda', re.UNICODE)
u'Castaeda'
>>> re.findall(ur"[^-' ().,\w]+", u'Castañeda', re.UNICODE)
[]

当我使用 findall 时,它正确地将 ñ 视为字母字符,但当我使用 sub 时,它会替换它——将其视为非字母字符。

我已经能够使用 findall 和 string.replace 获得正确的功能,但这似乎是一个糟糕的解决方案。 另外,我想使用 re.split,我遇到了与 re.sub 相同的问题。

在此先感谢您的帮助。

re.sub的调用签名是:

re.sub(pattern, repl, string, count=0)

所以

re.sub(ur"[^-' ().,\w]+", '' , u'Castañeda', re.UNICODE)

count设置为re.UNICODE ,其值为 32。

请尝试:

In [57]: re.sub(ur"(?u)[^-' ().,\w]+", '', u'Castañeda')
Out[57]: u'Casta\xf1eda'

在正则表达式的开头放置(?u)是在正则表达式本身中指定re.UNICODE标志的另一种方法。 您也可以通过这种方式设置其他标志(?iLmsux) (有关更多信息,请单击此链接并搜索“(?iLmsux)”。)

同样, re.split的调用签名是:

re.split(pattern, string, maxsplit=0)

解决方法是一样的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM