2010-05-29 2 views

ответ

3

Вы можете использовать re.split.

>>> import re 
>>> re.split('\W+', 'Words, words, words.') 
['Words', 'words', 'words', ''] 

Отрегулируйте шаблон, чтобы содержать только символы, которые вы хотите сохранить.

Смотрите также: stripping-non-printable-characters-from-a-string-in-python


Пример (ж/длинной минус):

>>> # \xe2\x80\x93 represents a long dash (or long minus) 
>>> s = 'hello – world' 
>>> s 
'hello \xe2\x80\x93 world' 
>>> import re 
>>> re.split("\xe2\x80\x93", s) 
['hello ', ' world'] 

Или же с юникодом:

>>> # \u2013 represents a long dash, long minus or so called en-dash 
>>> s = u'hello – world' 
>>> s 
u'hello \u2013 world' 
>>> import re 
>>> re.split(u"\u2013", s) 
[u'hello ', u' world'] 
+0

Как указать, что я хочу разбить точно на шестнадцатеричный символ 97? – Donnied

+0

Просмотреть мое обновленное сообщение; Надеюсь, поможет. – miku

+0

Я думаю, re.split («\ x97», s) должен это сделать. – laher

1

Просто использовать строку/unicode split (они действительно не заботятся о той строчке, которую вы разделили (кроме константы). Если вы хотите, чтобы t о использовать Regex затем использовать re.split)

Чтобы получить разделительную строку либо избавиться от нее, как и другие люди показали "\ x97"

или

использовать Chr (0x97) для строки (0-255) или unichr (0x97) для Юникода

таким примером может быть

'will not be split'.split(chr(0x97)) 

'will be split here:\x97 and this is the second string'.split(chr(0x97)) 
+0

Спасибо. Мне нравится использование chr(). – Donnied

+0

(0) Вы имеете в виду метод разметки str/unicode (1) «кроме константы»: это может быть любое выражение, которое оценивается в одну строку (например, «chr (0x97)») (2) использование '[uni] chr (0x97) вместо [u]" \ x97 "' является обфускаторным/избыточным/расточительным/неустранимым (IMHO) - вы писали бы 'float (" 1.23 ")' вместо '1.23' ?? (3) Если он работает в юникоде, ему не понадобится 'unichr (0x97)', ему понадобится 'u '\ u2014" ', который является' '\ x97" .decode ("cp1252") ' –

+0

(0) В моем * английском * объяснении действительно нужно указать, что это метод * str *, а не метод, который работает с строкой ..., которая ** является ** классом str ???(1) это константа, ссылающаяся на строку, не может указать более одной строки (chr (97) всегда будет «\ x97»), где в качестве re.split может обращаться «\ x97 | \ x91». ** КУРС ** вы можете написать chr (i), где i - переменная, которая может измениться. (2) Да ... конечно, вы бы не сделали float-преобразование, но chr, может быть, полезно, если ему нужно было преобразовать число в строку ** во время выполнения **. –

2
_, _, your_result= your_input_string.partition('\x97') 

или

your_result= your_input_string.partition('\x97')[2] 

Если your_input_string не содержит '\x97', то your_result будет пустым. Если your_input_string содержит несколько'\x97' символов, your_result будет содержать все после первого символа '\x97', включая другие символы '\x97'.