Większość pytań, które znalazłem, jest stronnicza w tym, że szukają liter w swoich liczbach, podczas gdy szukam liczb w ciągach, w których chciałbym być ciągiem niezliczonych liczb. Muszę wpisać ciąg i sprawdzić, czy zawiera on jakieś liczby i czy go odrzuca.
Funkcja isdigit()
zwraca tylko True
wtedy, gdy WSZYSTKIE znaki są cyframi. Chcę tylko sprawdzić, czy użytkownik wprowadził numer, a więc zdanie takie jak "I own 1 dog"
czy coś takiego.
Jakieś pomysły?
r'-?\d+'
\d
dopasuje tylko jedną cyfrę w zakresie0
do9
.Możesz użyć kombinacji
any
istr.isdigit
:Funkcja zwróci,
True
jeśli w ciągu istnieje cyfra. W przeciwnym razieFalse
. W .Próbny:
źródło
any
akceptuje wyrażenia generatora.posługiwać się
Ref: https://docs.python.org/2/library/stdtypes.html#str.isalpha
źródło
'_'.isalpha()
. „False”.https://docs.python.org/2/library/re.html
Lepiej użyj wyrażenia regularnego. Jest znacznie szybszy.
źródło
None
Możesz zastosować funkcję isdigit () do każdego znaku w ciągu. Lub możesz użyć wyrażeń regularnych.
Znalazłem również Jak znaleźć jedną liczbę w ciągu znaków w Pythonie? z bardzo odpowiednimi sposobami zwracania liczb. Poniższe rozwiązanie pochodzi z odpowiedzi na to pytanie.
Alternatywnie:
Aby uzyskać więcej informacji, zobacz dokumentację regularną: http://docs.python.org/2/library/re.html
Edycja: Zwraca rzeczywiste liczby, a nie wartość logiczną, więc powyższe odpowiedzi są bardziej poprawne w twoim przypadku
Pierwsza metoda zwróci pierwszą cyfrę i kolejne kolejne cyfry. Zatem 1,56 zostanie zwrócone jako 1. 10 000 zostanie zwrócone jako 10. 0207-100-1000 zostanie zwrócone jako 0207.
Druga metoda nie działa.
Aby wyodrębnić wszystkie cyfry, kropki i przecinki i nie zgubić kolejnych cyfr, użyj:
źródło
Możesz do tego użyć metody NLTK.
W tekście znajdzie się zarówno „1”, jak i „jeden”:
źródło
Możesz to zrobić w następujący sposób:
if a_string.isdigit(): do_this() else: do_that()
https://docs.python.org/2/library/stdtypes.html#str.isdigit
Używanie
.isdigit()
oznacza także brak konieczności uciekania się do obsługi wyjątków (try / wyjątek) w przypadkach, w których musisz użyć rozumienia listy (próba / wyjątek nie jest możliwa w ramach rozumienia listy).źródło
Możesz użyć zakresu z liczbą, aby sprawdzić, ile razy liczba pojawia się w ciągu, sprawdzając ją względem zakresu:
źródło
Dziwi mnie, że nikt nie wspomniał o tej kombinacji
any
imap
:w Pythonie 3 prawdopodobnie jest tam najszybszy (z wyjątkiem być może wyrażeń regularnych), ponieważ nie zawiera żadnej pętli (a aliasing funkcji unika wyszukiwania
str
).Nie używaj tego w Pythonie 2, ponieważ
map
zwraca alist
, które przerywaany
zwarcieźródło
A co z tym?
źródło
Sprawię, że odpowiedź @zyxue będzie bardziej wyraźna:
które jest rozwiązaniem z najszybszym testem porównawczym spośród rozwiązań zaproponowanych przez @zyxue w odpowiedzi.
źródło
Prostszym sposobem rozwiązania jest jak
źródło
Ten kod generuje sekwencję o rozmiarze n, która przynajmniej zawiera wielkie litery, małe litery i cyfrę. Korzystając z pętli while, gwarantujemy to zdarzenie.
źródło
any
iord
można je łączyć, aby osiągnąć cel, jak pokazano poniżej.Kilka uwag na temat tej implementacji.
any
jest lepszy, ponieważ działa jak wyrażenie zwarcia w języku C i zwróci wynik, gdy tylko będzie można go określić, tj. w przypadku łańcucha „a1bbbbbbc” b i „c” nawet nie zostaną porównane.ord
jest lepszy, ponieważ zapewnia większą elastyczność, np. numery kontrolne tylko między „0” a „5” lub dowolnym innym zakresem. Na przykład, jeśli chcesz napisać walidator dla szesnastkowej reprezentacji liczb, chciałbyś, aby ciąg zawierał alfabety tylko w zakresie od „A” do „F”.źródło
Zwraca cały ciąg zawierający zarówno alfabety, jak i liczby. isalpha () zwraca ciąg zawierający wszystkie cyfry lub wszystkie znaki.
źródło
To prawdopodobnie nie jest najlepsze podejście w Pythonie, ale jako Haskeller to podejście lambda / mapa miało dla mnie idealny sens i jest bardzo krótkie:
anydigit = lambda x: any(map(str.isdigit, x))
Oczywiście nie trzeba go nazywać. Nazwany może być używany jak
anydigit("abc123")
, co wydaje mi się tym, czego szukałem!źródło