Найти - Пользователи
Полная версия: регулярные кирилица [а-я] , питон 2.7
Начало » Python для новичков » регулярные кирилица [а-я] , питон 2.7
1 2 3 4
pulya
запускаю питон 2.7 ( питон 3 нет возможности использовать) с помощью команды
python file.py in.txt

в файле in.txt находятся русские символы ( кирилица) и английские символы
мне необходимо обработать их с помощью регулярных выражений.
я знаком с тем что в питоне 2.7 еще не было юникода и надо ВСЕ перевести в него ( и регулярку, и сам текст). Поэтому мне нужно понять, где у меня ошибка при переводе в юникод.

ниже текст скрипта file.py

#coding: utf-8 
# load modules
import re
import sys
#import codecs
# read file, write file
a = open(sys.argv[1],"r")
s = a.readline()
s = unicode(s, 'utf8')
regexp = re.compile(u"[а-яА-ЯёЁa-zA-Z0-9]", flags=re.I + re.U)
tt = re.findall(regexp, s)
num = len(tt)
c=0
b = open('/home/mimino/pyliyt.txt', 'w')
while c < num:
	h=(tt[c]+':')
	h=h.strip()
	h=h.encode('utf8')
	b.writelines((h)+'\n')
	c+=1
# close files
try:
  a.close()
  b.close()
finally:
  print "all done"


ошибка выдается следующая

  File "file.py", line 13
    regexp = re.compile(u"[▒-▒▒-߸▒a-zA-Z0-9]",flags=re.I + re.U)
SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xe0 in position 0: unexpected end of data
bismigalis
файл точно в utf-8 ?
doza_and
pulya
еще не было юникода
Улыбнуло.
pulya
( и регулярку, и сам текст)
И еще текст программы. Похоже что кодировка питоновского файла не соответствует. Ваш код у меня нормально ломается.
pulya
bismigalis
файл точно в utf-8 ?

исходный файл in.txt (я вижу что он действительно в utf-8 )

pulya
doza_and

вы были несомненно правы!

я редактировал питоновский файл в 1251

сейчас я сменил на utf-8 и отредактировал его.
после чего запустил и скрипт действительно отработал по кодировке.


и в итоге на выходе я получил также utf-8
(прикрепил в атаче)


но) я сейчас страдаю над уже следующей проблемой:
на выходном файле видно, что у меня каждая строчка состоит из символа, хотя я же искал регулярным выражением слово. Поправьте пожалуйста грешника.
pulya
сам поправил свой код

ошибочная строка
regexp = re.compile(u"[а-яА-ЯёЁa-zA-Z0-9]", flags=re.I + re.U)

правильная строка
regexp = re.compile(u"[а-яА-ЯёЁa-zA-Z0-9]\w+", flags=re.I + re.U)


и тогда будут искаться слова с цифрами, или просто цифры.

всем спасибо!
Budulianin
pulya

Ты понимаешь, что значат эти флаги ?

re.I + re.U
pulya
Budulianin
pulyaТы понимаешь, что значат эти флаги ?

re.I регистр игнорируется
re.U используется юникод


вопрос я понял с намеком
т.е. можно уменьшить мое регулярное выражение, верно?
Budulianin
pulya

Или флаг убрать
pulya
Budulianin

я бы хотел флаги оставить, и уменьшить регулярку.
т.е. оптимизировать код, сделать его красивее.

подскажите пожалуйста как это корректно сделать.

низко кланяюсь.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB