Pertanyaan Python Regex - Cara Mendapatkan Posisi dan Nilai-Nilai Pertandingan


Bagaimana saya bisa mendapatkan posisi awal dan akhir dari semua pertandingan menggunakan re modul? Misalnya diberi pola r'[a-z]' dan string 'a1b2c3d4' Saya ingin mendapatkan posisi di mana ia menemukan setiap huruf. Idealnya, saya ingin mendapatkan teks pertandingan kembali juga.


75
2017-10-30 14:04


asal


Jawaban:


import re
p = re.compile("[a-z]")
for m in p.finditer('a1b2c3d4'):
    print m.start(), m.group()

98
2017-10-30 14:15



Diambil dari

Regular Expression HOWTO

span () mengembalikan indeks awal dan akhir dalam satu tuple. Sejak itu   metode pertandingan hanya memeriksa apakah RE cocok pada awal string,   start () akan selalu nol. Namun, metode pencarian RegexObject   instance memindai string, jadi pertandingan mungkin tidak dimulai dari nol   dalam hal itu.

>>> p = re.compile('[a-z]+')
>>> print p.match('::: message')
None
>>> m = p.search('::: message') ; print m
<re.MatchObject instance at 80c9650>
>>> m.group()
'message'
>>> m.span()
(4, 11)

Gabungkan dengan:

Pada Python 2.2, metode finditer () juga tersedia, mengembalikan urutan instance MatchObject sebagai iterator.

>>> p = re.compile( ... )
>>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...')
>>> iterator
<callable-iterator object at 0x401833ac>
>>> for match in iterator:
...     print match.span()
...
(0, 2)
(22, 24)
(29, 31)

Anda harus bisa melakukan sesuatu atas perintah

for match in re.finditer(r'[a-z]', 'a1b2c3d4'):
   print match.span()

37
2017-10-30 14:16



Untuk Python 3.x

from re import finditer
for match in finditer("pattern", "string"):
    print(match.span(), match.group())

Anda akan dapatkan \n dipisahkan tuples (terdiri dari indeks pertama dan terakhir dari pertandingan, masing-masing) dan pertandingan itu sendiri, untuk setiap hit dalam string.


9
2017-07-05 13:08