我在尝试找出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。
相同的问题提前感谢您的帮助。
答案 0 :(得分:7)
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)
。 (有关详细信息,请单击this link并搜索“(?iLmsux)”。)
同样,re.split
的呼叫签名是:
re.split(pattern, string, maxsplit=0)
解决方案是一样的。