2015-08-13 2 views
1

Следующая регулярное выражение работать в Интернете, но не работает в питона кода и показывает никаких соответствий: '. \ Х + [0-9] https://regex101.com/r/lY1kY8/2регулярных выражений символов Юникода

з = re.sub (г,»», с)

требуется:

re.sub (г '\ х + [0-9] *.',»», r'cats \ XE2 \ x80 \ x99 лица)

Выход [23]: «лица кошек»

в основном захотелось Ове ЮНИКОДу специальные символы "\xe2\x80\x99"

+0

Если вы хотите сопоставить эти 3 символа Unicode, используйте 'ur '[\ xe2 \ x80 \ x99]'' regex с 'search'. 're.search (ur '[\ xe2 \ x80 \ x99]', u'cats \ xe2 \ x80 \ x99 faces ')' Он работает? –

+0

@stribizhev no все charac – stackit

ответ

2

В качестве другого варианта, который не требует регулярных выражений, вы могли бы вместо того, чтобы удалить символы Юникода, удалив ничего нет в списке string.printable

>>> import string 
>>> ''.join(i for i in 'cats\xe2\x80\x99 faces' if i in string.printable) 
'cats faces' 
+0

хорошо, для полноты любого предложения регулярного выражения? – stackit

2
print re.findall(r'\\x.*?[0-9]* ',r'cats\xe2\x80\x99 faces') 
           ^^ 

Используйте raw mode flag.Use findall как match начинается соответствие с начала

print re.sub(ur'\\x.*?[0-9]+','',r'cats\xe2\x80\x99 faces') 

с re.sub

s=r'cats\xe2\x80\x99 faces' 
print re.sub(r'\\x.+?[0-9]*','',s) 

EDIT:

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

s='cats\xe2\x80\x99 faces' 
\xe2\x80\x99 is U+2019 
print re.sub(u'\u2019','',s.decode('utf-8')) 
+0

не работает либо – stackit

+0

способ применения это в замене? – stackit

+0

s = re.sub (r '\\ x. + [0-9]', '', s) – stackit

1

Предположим, вы используете Python 2.x

>>> s = 'cats\xe2\x80\x99 f' 
>>> len(s), s[4] 
(9, 'â') 

Средство символов, таких как \xe2, имеет длину 1, а не 3. Таким образом, вы не можете сопоставить его с r'\\x.+?[0-9]*', чтобы соответствовать ему.

>>> s = '\x63\x61\x74\x73\xe2\x80\x99 f' 
>>> ''.join([c for c in s if c <= 'z']) 
'cats f' 

Помогите этому немного помочь.

Смежные вопросы