2012-06-08 16 views

Odpowiedz

24

Jeśli chcesz przetestować ciąg przeciwko wyrażenia regularnego, korzystania z biblioteki re

import re 
valid = re.match('^[\w-]+$', str) is not None 
5

Python wyrażenia regularnego, a także:

import re 
if re.match('^[\w-]+$', s): 
    ... 

Lub można utworzyć listę dozwolonych znaki:

from string import ascii_letters 
if all(c in ascii_letters+'-' for c in s): 
    ... 
+0

re.match ('^ [\ w -] + $', s) zwraca odpowiednią instancję MatchObject. Zwraca None, jeśli ciąg nie pasuje do wzorca. Powinny być porównywane z None. – Temak

+1

@Enor Dlaczego? Każdy obiekt dopasowania będzie prawdą, None jest jedyną możliwą wartością falsyfikacji. –

1

Aby sprawdzić, czy ciąg zawiera tylko alfanumeryczną i kreski, użyłbym

import re 
found_s = re.findall('^[\w-]+$', s) 
valid = bool(found_s) and found_s[0] == s 
+0

oops nieważne, tak niepotrzebne – richard

1

bez importowania dowolny moduł tylko przy użyciu czystego Python, usunąć none alfa numeryczny z wyjątkiem myślnikami.

string = '#Remove-*crap?-from-this-STRING-123$%' 

filter_char = lambda char: char.isalnum() or char == '-' 
filter(filter_char, string) 

# This returns--> 'Remove-crap-from-this-STRING-123' 

Lub w jednym wierszu:

''.join([c for c in string if c.isalnum() or c in ['-']]) 
+0

To powinno być zaakceptowaną odpowiedzią, nie potrzebujesz wyrażeń regularnych ani zewnętrznych pakietów, aby rozwiązać ten problem. – Roganartu

Powiązane problemy