在Python 2和Python 3中匹配Unicode字符。

问题描述 投票:0回答:1

Python 3

>>> import re
>>> 
>>> REGEX_KHMER = re.compile(r"[\u1780-\u17dd\u17e0-\u17e9\u17f0-\u17f9]+")
>>> value = "ហួយ"
>>> 
>>> re.search(REGEX_KHMER, value)
<_sre.SRE_Match object; span=(0, 3), match='ហួយ'>

但在Python 2中

>>> import re
>>> 
>>> REGEX_KHMER = re.compile(r"[\u1780-\u17dd\u17e0-\u17e9\u17f0-\u17f9]+")
>>> 
>>> value = "ហួយ"
>>> 
>>> re.search(REGEX_KHMER, value)
>>> reg = re.search(REGEX_KHMER, value)
>>> reg
>>> 

我渴望Python 3的行为,但为什么regex模式不能匹配Unicode字符,如 ហួយ 但在Python 2中却能正常工作?

python python-2.7
1个回答
2
投票

我你真的 必须 使用Python 2,这个应该可以在那里工作。

# coding=utf-8
import re

REGEX_KHMER = re.compile(ur"[\u1780-\u17dd\u17e0-\u17e9\u17f0-\u17f9]+", re.UNICODE)

value = ur"ហួយ"
match = re.search(REGEX_KHMER, value)
print(match.group(0))

所以

  • 要明确源文件的编码方式 coding=utf-8
  • 字符串前加上 ur 表示这是一个utf-8的字符串。
  • 告诉regex引擎期待Unicode的出现
© www.soinside.com 2019 - 2024. All rights reserved.