Как разбить строку на Python на непечатаемом символе ascii (например, длинный знак минуса hex 0x97, Octal 227)? Мне не нужен персонаж. Информация после нее будет сохранена как переменная.Как разделить строку на непечатаемый символ ascii в Python
ответ
Вы можете использовать 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']
Просто использовать строку/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))
Спасибо. Мне нравится использование chr(). – Donnied
(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) В моем * английском * объяснении действительно нужно указать, что это метод * str *, а не метод, который работает с строкой ..., которая ** является ** классом str ???(1) это константа, ссылающаяся на строку, не может указать более одной строки (chr (97) всегда будет «\ x97»), где в качестве re.split может обращаться «\ x97 | \ x91». ** КУРС ** вы можете написать chr (i), где i - переменная, которая может измениться. (2) Да ... конечно, вы бы не сделали float-преобразование, но chr, может быть, полезно, если ему нужно было преобразовать число в строку ** во время выполнения **. –
_, _, 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'
.
Как указать, что я хочу разбить точно на шестнадцатеричный символ 97? – Donnied
Просмотреть мое обновленное сообщение; Надеюсь, поможет. – miku
Я думаю, re.split («\ x97», s) должен это сделать. – laher