Mam ciąg, którym chcę zastąpić dowolny znak, który nie jest standardowym znakiem lub liczbą, na przykład (az lub 0-9), gwiazdką. Na przykład „h ^ & ell”., | Ow] {+ orld ”jest zastępowane przez„ h * ell * o * w * orld ”. Zwróć uwagę, że wiele znaków, takich jak „^ &”, zostanie zastąpionych jedną gwiazdką. Jak bym to zrobił?
100
Odpowiedzi:
Regex na ratunek!
Przykład:
źródło
re.sub("[\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+", " ", ":%# unicode ΣΘΙП@./\n")
import re; regex = re.compile('[^0-9a-zA-Z]+'); regex.sub('*', 'h^&ell.,|o w]{+orld')
\W
dotyczy znaków niebędących słowami, jest prawie taki sam, ale dopuszcza podkreślenie jako znak słowa (nie wiem dlaczego): docs.python.org/3.6/library/re.html#index-32Sposób pytoniczny.
Nie dotyczy to jednak grupowania wielu kolejnych niepasujących znaków, np
"h^&i => "h**i
nie"h*i"
tak jak w rozwiązaniach regex.źródło
Próbować:
w Pythonie3:
Edycja: zdał sobie sprawę, że OP chce zamienić znaki nieznakowe na „*”. Moja odpowiedź nie pasuje
źródło
Użyj,
\W
które jest równoważne z[^a-zA-Z0-9_]
. Sprawdź dokumentację, https://docs.python.org/2/library/re.htmlaktualizacja: to rozwiązanie wyklucza również podkreślenie. Jeśli chcesz, aby wykluczyć tylko alfabety i liczby, bardziej odpowiednie jest rozwiązanie nneonneo.
źródło
\W
jest to równoważne[^a-zA-Z0-9_]
tylko w Pythonie 2.x. W Pythonie 3.x\W+
jest równoważne[^a-zA-Z0-9_]
tylko wtedy, gdy użytore.ASCII
/re.A
flag.