Sebagian besar pertanyaan yang saya temukan bias pada fakta mereka mencari huruf dalam jumlah mereka, sedangkan saya mencari angka dalam apa yang saya inginkan menjadi string yang tak terhitung jumlahnya. Saya perlu memasukkan string dan memeriksa untuk melihat apakah itu berisi angka dan apakah itu menolaknya.
Fungsi isdigit()
hanya kembali True
jika SEMUA karakter adalah angka. Saya hanya ingin melihat apakah pengguna telah memasukkan angka sehingga kalimat seperti "I own 1 dog"
atau sesuatu.
Ada ide?
r'-?\d+'
\d
akan cocok hanya satu digit di kisaran0
untuk9
.Anda dapat menggunakan kombinasi dari
any
danstr.isdigit
:Fungsi akan kembali
True
jika digit ada di string, jika tidakFalse
.Demo:
sumber
any
menerima ekspresi generator.menggunakan
Ref: https://docs.python.org/2/library/stdtypes.html#str.isalpha
sumber
'_'.isalpha()
False.https://docs.python.org/2/library/re.html
Anda sebaiknya menggunakan ekspresi reguler. Jauh lebih cepat.
sumber
None
Anda bisa menerapkan fungsi isdigit () pada setiap karakter di String. Atau Anda bisa menggunakan ekspresi reguler.
Saya juga menemukan Bagaimana cara menemukan satu angka dalam sebuah string dengan Python? dengan cara yang sangat cocok untuk mengembalikan angka. Solusi di bawah ini adalah dari jawaban dalam pertanyaan itu.
Kalau tidak:
Untuk Informasi lebih lanjut, lihat dokumen regex: http://docs.python.org/2/library/re.html
Sunting: Ini Mengembalikan angka yang sebenarnya, bukan nilai boolean, sehingga jawaban di atas lebih tepat untuk kasus Anda
Metode pertama akan mengembalikan digit pertama dan digit berikutnya berturut-turut. Dengan demikian 1,56 akan dikembalikan sebagai 1. 10.000 akan dikembalikan 10. 10.2020-100-1000 akan dikembalikan sebagai 0.207.
Metode kedua tidak berhasil.
Untuk mengekstrak semua digit, titik, dan koma, dan tidak kehilangan digit non-berturut-turut, gunakan:
sumber
Anda dapat menggunakan metode NLTK untuk itu.
Ini akan menemukan '1' dan 'One' dalam teks:
sumber
Anda dapat mencapai ini sebagai berikut:
if a_string.isdigit(): do_this() else: do_that()
https://docs.python.org/2/library/stdtypes.html#str.isdigit
Menggunakan
.isdigit()
juga berarti tidak harus menggunakan penanganan pengecualian (coba / kecuali) dalam kasus di mana Anda perlu menggunakan pemahaman daftar (coba / kecuali tidak mungkin di dalam pemahaman daftar).sumber
Anda dapat menggunakan rentang dengan hitungan untuk memeriksa berapa kali suatu angka muncul dalam string dengan mencentangnya terhadap rentang:
sumber
Saya terkejut bahwa tidak ada yang menyebutkan kombinasi
any
danmap
:dalam python 3 itu mungkin yang tercepat di sana (kecuali mungkin untuk regex) adalah karena tidak mengandung loop apa pun (dan aliasing fungsi menghindari mencari di
str
).Jangan gunakan itu di python 2 sebagai
map
mengembalikan alist
, yang merusakany
hubungan arus pendeksumber
Bagaimana dengan yang ini?
sumber
Saya akan membuat jawaban @zyxue sedikit lebih eksplisit:
yang merupakan solusi dengan tolok ukur tercepat dari solusi yang @zyxue usulkan pada jawabannya.
sumber
Cara yang lebih mudah untuk diselesaikan adalah sebagai
sumber
Kode ini menghasilkan urutan dengan ukuran n yang setidaknya berisi huruf besar, huruf kecil, dan angka. Dengan menggunakan loop sementara, kami telah menjamin acara ini.
sumber
any
danord
dapat dikombinasikan untuk melayani tujuan seperti yang ditunjukkan di bawah ini.Beberapa poin tentang implementasi ini.
any
lebih baik karena bekerja seperti ekspresi hubung singkat dalam Bahasa C dan akan mengembalikan hasil segera setelah itu dapat ditentukan yaitu dalam kasus string 'a1bbbbbbbc' 'b's dan' c's bahkan tidak akan dibandingkan.ord
lebih baik karena memberikan lebih banyak fleksibilitas seperti hanya memeriksa angka antara '0' dan '5' atau rentang lainnya. Sebagai contoh jika Anda menulis validator untuk representasi angka heksadesimal Anda ingin string memiliki huruf dalam rentang 'A' ke 'F' saja.sumber
Ini mengembalikan semua string yang memiliki huruf dan angka di dalamnya. isalpha () mengembalikan string dengan semua digit atau semua karakter.
sumber
Ini mungkin bukan pendekatan terbaik dengan Python, tetapi sebagai Haskeller, pendekatan lambda / peta ini sangat masuk akal bagi saya dan sangat singkat:
anydigit = lambda x: any(map(str.isdigit, x))
Tidak perlu disebutkan namanya tentu saja. Dinamakan itu bisa digunakan seperti
anydigit("abc123")
, yang terasa seperti apa yang saya cari!sumber