7

我需要这个问题的解决方案,Python 除外!我已经尝试为 Python 安装正则表达式库,显然这可以在 Python 的正则表达式中使用 POSIX 表达式,但我猜它在[:alpha:]类中不包含 Unicode 字符。例如:

>>> 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:我不想匹配任何非“单词”字符;“单词”是指 az、AZ、空格和单词字符的任何重音变体。我希望我能理解我的想法;在一个短语中

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中有什么方法可以解决这个问题?

4

1 回答 1

2

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

我很惊讶,我无法将重音字符转换为正确的 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)
于 2012-11-07T01:15:07.783 回答