如何使用python regexp在这种情况下解析?

时间:2017-08-10 02:05:03

标签: python regex parsing

对不好的标题感到抱歉,但我找不到具体的词来描述这个问题。

我的测试字符串:

  

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解析它?

2 个答案:

答案 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',