Maaf untuk judul yang buruk, tetapi saya tidak dapat menemukan kata khusus untuk menggambarkan pertanyaan ini.

String pengujian saya:

MethodInvocation(name='isOnlySingleDcAllowed', argument=["Anda tidak tahu apa-apa tentang itu"], type_arguments=["Anda tidak tahu apa-apa tentang itu"], target=.......... ................................................................... ........................................................ ............................MethodInvocation(name='isOnlySingleDcAllowed', argument=["Anda tidak tahu apa-apa tentang itu"] , type_arguments=["Anda tidak tahu apa-apa tentang itu"], target='super',

"u tidak tahu apa-apa tentang itu" berarti bagian ini tidak diketahui, Anda harus menggunakan .* atau .*? untuk menguraikannya.

Hasil keinginan saya: MethodInvocation kedua dapat diurai.

MethodInvocation(name='isOnlySingleDcAllowed', argument=["Anda tidak tahu apa-apa tentang itu"], type_arguments=["Anda tidak tahu apa-apa tentang itu"], target='super',

Regexp gagal saya:

MethodInvocation\(name='isOnlySingleDcAllowed', argument=\[.*?\], type_arguments=\[.*?\], target='super'

Regexp ini akan mengurai semua hasil alih-alih MethodInvocation kedua.

Bagaimana saya bisa menguraikannya menggunakan python regexp?

0
Leo Hsieh 10 Agustus 2017, 05:05

2 jawaban

Jawaban Terbaik

Leo, cobalah regexp ini:

MethodInvocation\(name='isOnlySingleDcAllowed', arguments=\[[^\]]*\], type_arguments=\[[^\]]*\], target='super',

Yang hanya mengembalikan:

"MethodInvocation(name='isOnlySingleDcAllowed', argument=["Anda tidak tahu apa-apa tentang itu"], type_arguments=["Anda tidak tahu apa-apa tentang itu"], target='super',"

Ini bekerja dengan memastikan bahwa grup argumen Anda yang tidak dikenal (Anda tidak tahu ...) berakhir di kurung akhir pertama dengan mengecualikan karakter itu dari bagian pencarian tersebut.

Semoga ini membantu.

1
Jim Simson 10 Agustus 2017, 04:54

Bagaimana kalau menggunakan finditer()?

import re

s="""MethodInvocation(name='isOnlySingleDcAllowed', arguments=["u don't know anything about it"], type_arguments=["u don't know anything about it"], target=.................................................................... ......................................................................MethodInvocation(name='isOnlySingleDcAllowed', arguments=["u don't know anything about it"], type_arguments=["u don't know anything about it"], target='super',"""

ind=[]
for a in re.finditer('MethodInvocation', s):
    ind.append((a.start(), a.end()))

#ind[1][0] - starting index of the second string
output = s[ind[1][0]:len(s)]
print(output)

Dan outputnya adalah:

MethodInvocation(name='isOnlySingleDcAllowed', arguments=["u don't know anything about it"], type_arguments=["u don't know anything about it"], target='super',
0
kimalser 10 Agustus 2017, 04:15