意外的RegEx在非常ascii符号的Python 2.7中工作

时间:2014-02-14 18:50:40

标签: python regex

我使用正则表达式来查找句子中的单词。但是下面的代码中描述的问题出现了。 它在http://www.regexr.com/上运行良好 但python与非ascii变种不匹配

import re
#ascii
pat = u"(tes?ts?)"
ttt = re.finditer(pat, u"test and tets")
print ttt.next().start()
print ttt.next().start()
# this works fine

#russian
pat = u"(молоде?цы?)"
ttt = re.finditer(pat, u"молодец и молодцы")
print ttt.next().start()
print ttt.next().start()
# this does not match anything - throws iterator error

感谢您的帮助!谢谢 UPD:输出+追溯

0
9
Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
StopIteration

UPD2:将模式更改为此

pat = u"(молод[е]?ц[ы]?)"
ttt = re.finditer(pat, u"молодец и молодцы")
print ttt.next().start()
print ttt.next().start()

导致匹配第一个单词但没有第二个

18
Traceback (most recent call last):
  File "<stdin>", line 11, in <module>
StopIteration

1 个答案:

答案 0 :(得分:0)

您确定使用正确的编码保存文件吗?当我在文件顶部声明enconding时,Ubuntu上的Python 2.7.5+为我工作文件:

# -*- coding: utf-8 -*-

import re
#ascii
pat = u"(tes?ts?)"
ttt = re.finditer(pat, u"test and tets")
print(ttt.next().start())
print(ttt.next().start())
# 0, 9

#russian
pat = u"(молоде?цы?)"
ttt = re.finditer(pat, u"молодец и молодцы")
print(ttt.next().start())
print(ttt.next().start())
# 0, 10