Comment diviser la ligne à caractère ascii non-impression en Python
-
05-10-2019 - |
Question
Comment puis-je diviser une ligne en Python à caractère ascii non-impression (comme le signe moins longue hex 0x97, Octal 227)? Je ne vais pas besoin du personnage lui-même. Les informations après sera enregistrée en tant que variable.
La solution
Vous pouvez utiliser re.split
.
>>> import re
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
Ajuster le motif à inclure uniquement les caractères que vous souhaitez conserver.
Voir aussi: décapage-non-imprimables PERSONNAGE- de-a-chaîne en python
Exemple (p / long moins):
>>> # \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']
Ou, même avec unicode:
>>> # \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']
Autres conseils
_, _, your_result= your_input_string.partition('\x97')
ou
your_result= your_input_string.partition('\x97')[2]
Si your_input_string
ne contient pas de '\x97'
, alors your_result
sera vide. Si your_input_string
contient plusieurs caractères '\x97'
, your_result
contiendra tout ce qui suit le premier caractère de '\x97'
, y compris d'autres caractères '\x97'
.
Il suffit d'utiliser la chaîne / unicode méthode split (Ils ne se soucient pas vraiment de la chaîne que vous divisez sur (autre que c'est une constante. Si vous voulez utiliser une expression régulière puis utilisez re.split)
Pour obtenir la chaîne de division échapper soit comme les autres ont montré "\ X97"
ou
utilisation chr (0x97) pour les cordes (0-255) ou unichr (0x97) pour unicode
un exemple serait
'will not be split'.split(chr(0x97))
'will be split here:\x97 and this is the second string'.split(chr(0x97))