2014-02-14 83 views
0

我使用正則表達式來查找句子中的單詞。但是下面代碼中描述的問題出現了。 它適用於http://www.regexr.com/ 所有罰款,但蟒蛇不匹配非ASCII變種意外的RegExp在非ascii符號上的Python 2.7中工作

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

我無法重現此問題,您可以添加'print repr(pat)和'print repr(u「молодецимолодцы」)'? –

+0

你提到它會拋出一個迭代器錯誤。請[追溯]到你的問題。 – thegrinner

+0

如果你想測試Python的東西使用python的工具:www.pythex.org –

回答

0

你確定用正確的編碼保存文件?當我聲明文件頂部的彙編時,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 
+0

BoppreH,添加您的線與編碼或這一個「#編碼= UTF-8」沒有幫助 – epicenter

+0

我使用的IntelliJ IDEA的Python插件,AFAIK默認使用utf-8的代碼文件,所以它不能是它的來源 – epicenter