Mac OS X终端中的Python regex withÄÄÖ(utf8)

2024-09-29 01:25:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将包含瑞典字符的字符串与重新分割,但我不能让代码工作。在

wordsre = re.compile(r"[\WåäöÅÄÖ]+")
mytext = "hej. och gå! Med en #katt som leker 9 liv!"
newtext = wordsre.split(mytext)

输出为:

^{pr2}$

编辑:第三个单词应该是“gå”。瑞典字符“å”丢失。在

我在Mac OS X Mavericks上,在终端(Bash)输出中使用Python3.4和“locale”:

LANG="sv_SE.UTF-8"
LC_COLLATE="sv_SE.UTF-8"
LC_CTYPE="sv_SE.UTF-8"
LC_MESSAGES="sv_SE.UTF-8"
LC_MONETARY="sv_SE.UTF-8"
LC_NUMERIC="sv_SE.UTF-8"
LC_TIME="sv_SE.UTF-8"
LC_ALL=

我在Ubuntu论坛上找到了这个帖子,但是我不明白为什么它对我不起作用,尽管语言环境是正确的。在

http://ubuntuforums.org/showthread.php?t=1534940


Tags: 字符串代码remed字符utfenlc
3条回答

小字体:使用\w,而不是\W

这将起作用:

[\wåäöÅÄÖ]+

在Python中:

^{pr2}$

输出:

['hej', 'och', 'gå', 'Med', 'en', 'katt', 'som', 'leker', '9', 'liv']

说明

  • \W匹配不是字母、数字或下划线的字符,这与我们想要匹配单词的内容相反
  • 在python2中,\w匹配ASCII字母、数字或下划线(除非如@MartijnPieters指出,您使用re.UNICODE选项)
  • 在Python3中,\w匹配unicode字母、象形文字、数字或下划线(除非,正如@MartijnPieters所指出的那样,您使用re.ASCII选项),这样重音字母就不需要了(\w+就足够了)

从索引1中获取匹配的组

([^\s]+)

Live DEMO

或者试试看

^{pr2}$

Live DEMO

根据您的预期输出使用下面的正则表达式,排除空格,点,哈希和解释符号。在

([^\s\.#!]+)

Live DEMO


样本代码:

import re
p = re.compile(ur'([^\s]+)')
test_str = u"hej. och gå! Med en #katt som leker 9 liv!"

re.findall(p, test_str)

在要分割的字符中包含å。看来你误解了分割的作用。在

re.split()将在匹配characters类的任何内容上拆分单词;在您的例子中,这意味着任何\W匹配(任何不是字母、数字或_)的内容,并将字符åÅäÄöÖ添加到该集合中。在

如果不想拆分这些字符,请省略这些字符:

wordsre = re.compile(r"\W+")

{3}不是正则表达式的一部分。在

演示:

^{pr2}$

由于\w\W的反义词,您也可以使用re.findall()代替{},使用{}模式提取单词,而不是删除非单词字符:

>>> re.findall(r'\w+', mytext)
['hej', 'och', 'gå', 'Med', 'en', 'katt', 'som', 'leker', '9', 'liv']

另一个好处是现在没有尾随的空字符串。在

同样,当使用Unicode模式时,所有字母都包括在内,字符集不仅仅限于ASCII字母字符。在

相关问题 更多 >