Я использую python 2.4, и у меня возникают некоторые проблемы с регулярными выражениями unicode. Я попытался составить очень четкий и краткий пример моей проблемы. Похоже, что есть некоторая проблема с тем, как Python распознает различные кодировки символов или проблему с моим пониманием. Большое спасибо за то, что посмотрели!Python Unicode Regular Expression
#!/usr/bin/python
#
# This is a simple python program designed to show my problems with regular expressions and character encoding in python
# Written by Brian J. Stinar
# Thanks for the help!
import urllib # To get files off the Internet
import chardet # To identify charactor encodings
import re # Python Regular Expressions
#import ponyguruma # Python Onyguruma Regular Expressions - this can be uncommented if you feel like messing with it, but I have the same issue no matter which RE's I'm using
rawdata = urllib.urlopen('http://www.cs.unm.edu/~brian.stinar/legal.html').read()
print (chardet.detect(rawdata))
#print (rawdata)
ISO_8859_2_encoded = rawdata.decode('ISO-8859-2') # Let's grab this as text
UTF_8_encoded = ISO_8859_2_encoded.encode('utf-8') # and encode the text as UTF-8
print(chardet.detect(UTF_8_encoded)) # Looks good
# This totally doesn't work, even though you can see UNSUBSCRIBE in the HTML
# Eventually, I want to recognize the entire physical address and UNSUBSCRIBE above it
re_UNSUB_amsterdam = re.compile(".*UNSUBSCRIBE.*", re.UNICODE)
print (str(re_UNSUB_amsterdam.match(UTF_8_encoded)) + "\t\t\t\t\t--- RE for UNSUBSCRIBE on UTF-8")
print (str(re_UNSUB_amsterdam.match(rawdata)) + "\t\t\t\t\t--- RE for UNSUBSCRIBE on raw data")
re_amsterdam = re.compile(".*Adobe.*", re.UNICODE)
print (str(re_amsterdam.match(rawdata)) + "\t--- RE for 'Adobe' on raw data") # However, this work?!?
print (str(re_amsterdam.match(UTF_8_encoded)) + "\t--- RE for 'Adobe' on UTF-8")
'''
# In additon, I tried this regular expression library much to the same unsatisfactory result
new_re = ponyguruma.Regexp(".*UNSUBSCRIBE.*")
if new_re.match(UTF_8_encoded) != None:
print("Ponyguruma RE matched! \t\t\t--- RE for UNSUBSCRIBE on UTF-8")
else:
print("Ponyguruma RE did not match\t\t--- RE for UNSUBSCRIBE on UTF-8")
if new_re.match(rawdata) != None:
print("Ponyguruma RE matched! \t\t\t--- RE for UNSUBSCRIBE on raw data")
else:
print("Ponyguruma RE did not match\t\t--- RE for UNSUBSCRIBE on raw data")
new_re = ponyguruma.Regexp(".*Adobe.*")
if new_re.match(UTF_8_encoded) != None:
print("Ponyguruma RE matched! \t\t\t--- RE for Adobe on UTF-8")
else:
print("Ponyguruma RE did not match\t\t\t--- RE for Adobe on UTF-8")
new_re = ponyguruma.Regexp(".*Adobe.*")
if new_re.match(rawdata) != None:
print("Ponyguruma RE matched! \t\t\t--- RE for Adobe on raw data")
else:
print("Ponyguruma RE did not match\t\t\t--- RE for Adobe on raw data")
'''
Я работаю над проектом замены, и у меня возникают трудное время с не-ASCII кодируются файлы. Эта проблема является частью более крупного проекта - в конечном итоге я хотел бы заменить текст другим текстом (я получил это в ASCII, но пока не могу идентифицировать вхождения в других кодировках.) Еще раз спасибо.
http://brian-stinar.blogspot.com
-Брайан J. Stinar-
Что-то, что полностью отсутствующими из вашего описания является способ, в котором ваш код не удается. Вы пишете в своем коде * «# Это полностью не работает» *, но вы не даете никаких подсказок о том, как это не работает. Печатаются ли печатные строки? Вы получаете сообщения об ошибках/трассировки стека? – ThomasH