【问题标题】:Unexpected RegExp work in Python 2.7 on non ascii symbolsPython 2.7 中对非 ascii 符号的意外 RegExp 工作
【发布时间】:2014-02-14 18:50:39
【问题描述】:

我使用正则表达式来查找句子中的单词。但是出现了下面代码中描述的问题。 在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

【问题讨论】:

  • 我无法重现这个,你能添加print repr(pat)print repr(u"молодец и молодцы")的输出吗?
  • 您提到它会引发迭代器错误。请edit回溯到您的问题。
  • 如果你想为 python 测试一些东西,请使用 python 工具:www.pythex.org
  • Casimir 您的网站匹配正确,但是我在repl.it 得到了上面代码的错误

标签: python regex


【解决方案1】:

您确定使用正确的编码保存文件吗?当我在文件顶部声明编码时,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

【讨论】:

  • BoppreH,用编码添加你的行或这个“# coding=utf-8”没有帮助
  • 我在intelliJ IDEA中使用python插件,AFAIK默认使用utf-8作为代码文件,所以一定不是它的来源
猜你喜欢
  • 2018-08-05
  • 1970-01-01
  • 2023-04-07
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
相关资源
最近更新 更多