Czasami mam ciągi znaków z dziwnymi postaciami. Nie są widoczne w przeglądarce, ale są częścią ciągu i są liczone w len(). Jak mogę się tego pozbyć? Strip() usuwa normalną przestrzeń, ale nie znaki.Python - jak usunąć ukryte znaki ze stringów?
Odpowiedz
Collect zestaw znaków, które chcesz włączyć i usunąć resztę jak to
import re
text = re.sub("[^a-z0-9]+","", text, flags=re.IGNORECASE)
usunie wszelkie inne niż znaki az, AZ i od 0 do 9.
Wykorzystanie kategorie znaków z modułu string
. Jeśli chcesz, aby wszystkie znaki druku można zrobić
from string import printable
new_string = ''.join(char for char in the_string if char in printable)
Building na ciebie za odpowiedź, można to zrobić z re.sub
też:
new_string = re.sub("[^{}]+".format(printable), "", the_string)
Ponadto, jeśli chcesz zobaczyć wszystkie znaki łańcuch, nawet niedrukowalne te zawsze można zrobić
print repr(the_string)
które pokażą takie rzeczy jak \x00
dla znaków niedrukowalnych.
Z pewnością jest to poprawna odpowiedź. – dotancohen
Sekund odpowiedzi odpowiadał jak urok, dzięki. – Yehonatan
Wyrażenia regularne to dobre i bardzo uniwersalne narzędzie do wszelkiego rodzaju analizy ciągów. Jeśli problemem jest szybkość, może ci również pomóc metoda "translate" z klasy string.
Najpierw trzeba zdefiniować ('tożsamość') mapowanie, które niczego nie zmieni:
mapping = map(chr, range(256))
jeśli chcesz zastąpić każdy "a" przez "b", zmodyfikować mapowanie
mapping[ord('a')] = 'b'
teraz można zbudować tabelę dla metody "przetłumaczyć":
table = "".join(mapping)
i
print "abc".translate(table)
drukuje "bbc".
Jeśli naprawdę chcesz usunąć „A”, nie modyfikować mapowanie powyżej, zbudować tabelę, a następnie zadzwonić przetłumaczyć następująco:
print "abc".translate(table, "a")
daje „BC”.
Po zbudowaniu tabeli, metoda tłumaczenia jest bardzo szybka.
Więc w twoim przypadku można zmodyfikować odwzorowanie takie, że wszystkie niechciane znaki są odwzorowane na spacji
mapping = map(chr, range(256))
table = "".join(" " if c in unwanted_chars else c for c in map(chr, range(256)))
i używać len("my string".translate(table).trim())
który ignoruje niechciane znaki na początku i końca łańcucha.
Lub używasz len("my string".translate(table, unwanted_chars))
, które zignoruje wszystkie niechciane znaki.
Nice. +1 jutro, kiedy znów będę głosować. Myślałem o tłumaczeniu, ale byłem zbyt leniwy, by sprawdzić składnię. – agf
- 1. Jak usunąć nawiasy ze stringów w php?
- 2. Chcesz usunąć podwójne cudzysłowy ze stringów
- 3. Usuwanie numerów ze stringów
- 4. Jak usunąć ukryte znaki z łańcucha tekstowego w PHP?
- 5. Jak mogę usunąć pierwsze znaki X ze stringów za pomocą sed?
- 6. PHP usuwa symbole ze stringów
- 7. PHP. Usuń linki ze stringów
- 8. Ruby usuń puste linie ze stringów
- 9. ASP - Usuwanie podwójnych cudzysłowów ze stringów
- 10. reinterpretuj rzut tablic ze stringów na int
- 11. Jak usunąć określone znaki ze nazw plików przy użyciu BASH
- 12. utwórz obiekt json ze stringów z rubinem
- 13. Jak usunąć znaki specjalne html?
- 14. zastąpić znaki, które są ukryte w tekście
- 15. Jak usunąć nieprawidłowe znaki z ciągu?
- 16. usuwa znaki alfabetu i białe znaki ze stringa
- 17. Jak wyświetlać ukryte znaki domyślnie (ZERO WIDTH SPACE ie. & # 8203)
- 18. Jak usunąć określone podciągi ze zbioru ciągów w języku Python?
- 19. Jak usunąć znaki kontrolne z ciągu znaków?
- 20. Jak usunąć pierwsze 3 znaki z nsstring?
- 21. Jak usunąć niewidoczne znaki w t-sql?
- 22. Jak usunąć wszystkie znaki z ciągu znaków?
- 23. Jak usunąć znaki niedrukowalne/niewidoczne w ruby?
- 24. Jak usunąć nieprawidłowe znaki z ciągu?
- 25. Jak usunąć znaki numeryczne w tabeli mysql?
- 26. jak usunąć znaki z pliku czcionki?
- 27. Jak usunąć wszystkie znaki diakrytyczne z pliku?
- 28. Usunąć dwa ostatnie znaki ciągu
- 29. Jak usunąć litery ze sznurka?
- 30. Jak usunąć spację ze sznurka?
Zobacz tego rozwiązania: http://stackoverflow.com/questions/92438/stripping-non-printable-characters-from-a-string-in-python –