如何在Python中使用正则表达式匹配重音字符?

时间:2012-11-07 01:01:24

标签: python regex unicode non-ascii-characters

除了Python之外,我需要this question的解决方案!我已经尝试安装Python的正则表达式库as apparently,它允许在Python的正则表达式中使用POSIX表达式,但我猜它在[:alpha:]中不包含Unicode字符类。 E.g:

>>> re.search(r'[[:alpha:] ]+','Please work blåbær and NOW stop 123').group(0)
'Please work bl'

当我希望它匹配Please work blåbær and NOW stop

编辑:我正在使用Python 2.7

编辑2:我尝试了以下内容:

>>> re.search(re.compile('[\w ]+', re.UNICODE),'Please work blåbær and NOW stop 123').group(0)
'Please work bl\xc3'

不是我想要的(我想在第一个非ASCII字符之后匹配该部分),但至少它在字符上比以前更匹配。我应该在这做什么才能让它与我想要的其他东西相匹配?

编辑3:我不想匹配任何非"字"字符; by" word"我的意思是a-z,A-Z,空格和任何带字符的重音变体。我希望我得到了我的想法;在像

这样的短语中
lets match força, but stop before that comma

我想只匹配lets match força

编辑4:所以我尝试将Python 3用于这个脚本:

>>> re.search(re.compile('[\w ]+', re.UNICODE),'lets match força, but stop before that comma').group(0)
'lets match força'

我认为它在Python 3中大部分都有效,除了它还匹配数字(我绝对不想要)和下划线。有什么方法可以解决这个问题,在Python 2 3?

1 个答案:

答案 0 :(得分:2)

目前尚不清楚您使用的是哪个python版本。如果您使用2.x,那么您可能会遇到unicode问题。请参阅此post以获取更多指示,并随时更新您的问题以进一步详细说明。

我非常惊讶,我无法将重音字符转换为正确的unicode表示...

但有解决方法:

re.search(re.compile('((\w+\s)|(\w+\W+\w+\s))+', re.UNICODE), ur'Please work blåbær and NOW stop 123').group(0)

re.search(re.compile('\D+', re.UNICODE), ur'Please work blåbær and NOW stop 123').group(0)