首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >re中的俄语符号(Python)

re中的俄语符号(Python)
EN

Stack Overflow用户
提问于 2013-03-16 18:42:29
回答 6查看 14.2K关注 0票数 14

我从一个文件中获得了一个数据:

代码语言:javascript
复制
words = re.findall(r'[\w]+',self._from.encode('utf8'),re.U)

如果文件包含:

嗨,你好吗?

那么结果将是:

'Hi','how','are','you‘

但如果文件包含俄语(即西里尔符号),则:

Привет,какдела?

在这种情况下,结果是:

'\xd0','\xd1','\xd0','\xd0\xb2\xd0\xb5\xd1','\xd0\xba\xd0','\xd0\xba','\xd0\xb5\xd0','\xd0‘

为什么?见鬼?我已经添加了:

代码语言:javascript
复制
sys.setdefaultencoding('utf-8')

我使用的是python2.7和linux ubuntu。

答案:

代码语言:javascript
复制
words = re.findall(r'[\w]+',self._from.decode('utf8'),re.U)
print u" ".join(words)
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-03-16 18:59:26

要使用\w+匹配字母数字unicode字符,应该将unicode模式和unicode文本都传递给re.findall

Python2中的

假设您正在从文件中读取字节(而不是文本),则应对这些字节进行解码以获得unicode

uni =‘Привет,какдела?’.decode(‘utf-8’)

ur'(?u)\w+'是一个raw unicode literal。尽管在这里不是必需的,但是对正则表达式模式使用原始的unicode/字符串文字通常是一种很好的实践--它允许您避免在某些字符(如\s )之前使用双反斜杠。

正则表达式模式ur'(?u)\w+' bakes-in the Unicode flag,它告诉re.findall使\w依赖于Unicode字符属性数据库。

导入re uni =‘Привет,какдела?’.decode(‘utf-8’)打印(re.findall(ur‘(?u)\w+’,uni))

生成一个包含3个unicode“单词”的列表:

u'\u041f\u0440\u0438\u0432\u0435\u0442',u'\u043a\u0430\u043a',u'\u0434\u0435\u043b\u0430'

  • In Python3:

除了what were unicodes in Python2 are now strs in Python3之外,一般原理是相同的,并且不再尝试在两者之间进行自动转换。因此,再次假设您正在从文件中读取字节(而不是文本),您应该对字节进行解码以获得str,并使用str正则表达式模式:

导入re uni = b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82,\xd0\xba\xd0\xb0\xd0\xba \xd0\xb4\xd0\xb5\xd0\xbb\xd0\xb0?'.decode('utf')打印(re.findall(r‘(?u)\w+’,uni))

收益率

的“Привет‘,’как‘,’дела”

票数 10
EN

Stack Overflow用户

发布于 2018-07-15 04:55:59

我的解决方案是:

代码语言:javascript
复制
txt = re.findall(r'[А-я]+', data)

А-я-俄语字母表字母

票数 4
EN

Stack Overflow用户

发布于 2013-03-16 18:59:53

如果省略您得到的编码部分,您将获取一个已经是unicode的字符串,并将其编码为unicode:

代码语言:javascript
复制
line = u"Привет, как дела?"
words = re.findall(r'[\w]+',line ,re.U)
# words = [u'\u041f\u0440\u0438\u0432\u0435\u0442', u'\u043a\u0430\u043a', u'\u0434\u0435\u043b\u0430']
print words[0]
# prints Привет
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15448274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档