Muszę usunąć wszystkie znaki ze sznurka, z wyjątkiem numerów i symboli specjalnych. Przykład "asdasd 289(222):310"
powinien spowodować "289(222):310"
. Jak mam to zrobic ?
3 odpowiedzi
Możesz usunąć litery,
>>> import re
>>> s = "asdasd 289(222):310"
>>> m = re.sub(r'[A-Za-z]+', r'', s)
>>> m
' 289(222):310'
Jeśli chcesz usunąć spacje, spróbuj poniższy kod,
>>> m = re.sub(r'[A-Za-z ]+', r'', s)
>>> m
'289(222):310'
Możesz sprawdzić każdą postać, aby sprawdzić, czy jest to znak alfabetyczny.
>>> s = "asdasd 289(222):310"
>>> "".join(i for i in s if not i.isalpha())
' 289(222):310'
Jeśli chcesz usunąć wiodące i kończące białe znaki, hals na .strip()
>>> "".join(i for i in s if not i.isalpha()).strip()
'289(222):310'
Klasa string
ma metody isalpha()
i isdigit()
, które są przydatne dla takich rzeczy.
>>> '2'.isdigit()
True
>>> '2'.isalpha()
False
>>> 'a'.isdigit()
False
>>> 'a'.isalpha()
True
Jeśli z jakiegokolwiek powodu prędkość jest z istoty, następujący kod może pomóc:
from string import maketrans
trans1 = maketrans("abcdefghijklmnopqrstuvwxyzABCDEFGHOJKLMNOPQRSTUVWXYZ", " "*52)
s = "asdasd 289(222):310"
m = s.translate(trans1).replace(" ", "")
Termasy z Ipython's% Timeit Pokaż mi 1.2 UTEC do tego podejścia, 3,3 USEC dla REGEX Wysłany przez Avinash Raj i 8SEC dla metody Cyber (w systemie Windows 8.1 64 bit Python 2.7.8 64).
Używanie .strip zamiast .replace jest szybsze (~ 900 NS), ale nie zastąpi między spacjami.
Oczywiście czasy zależą od rodzaju danych, które zostaną przetworzone.
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.