对不好的标题感到抱歉,但我找不到具体的词来描述这个问题。
我的测试字符串:
MethodInvocation(name =' isOnlySingleDcAllowed',arguments = [" u don&t; t 知道任何事情"],type_arguments = ["你不知道任何关于它的事情 它&#34], 目标= ................................................ .................... .................................................. ....................的MethodInvocation(名称=' isOnlySingleDcAllowed&#39 ;, 争论= ["你不知道任何关于它的事情"],type_arguments = ["你不要 知道任何事情"],target =' super',
"你对此事一无所知"意味着这部分是未知的,你必须使用。*或。*?解析它。
我的愿望结果:第二个MethodInvocation可以被删除。
MethodInvocation(name =' isOnlySingleDcAllowed',arguments = [" u don&t; t 知道任何事情"],type_arguments = ["你不知道任何关于它的事情 它"],target =' super',
我的失败正则表达式:
MethodInvocation \(name =' isOnlySingleDcAllowed',arguments = \ [。*?\], type_arguments = \ [。*?\],target =' super'
此正则表达式将解析所有结果,而不是第二个MethodInvocation。
如何使用python regexp解析它?
答案 0 :(得分:1)
Leo,试试这个正则表达式:
MethodInvocation\(name='isOnlySingleDcAllowed', arguments=\[[^\]]*\], type_arguments=\[[^\]]*\], target='super',
仅返回:
" MethodInvocation(name =' isOnlySingleDcAllowed',arguments = ["你不知道任何关于它的事情"],type_arguments = [" u不知道任何关于它的事情"],target =' super',"
通过确保您的未知参数组(您不知道......)通过从搜索的那些部分中排除该字符而终止于第一个结束括号。
希望这有帮助。
答案 1 :(得分:0)
如何使用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)
输出是:
MethodInvocation(name='isOnlySingleDcAllowed', arguments=["u don't know anything about it"], type_arguments=["u don't know anything about it"], target='super',