从字符串中分离相似类型的子字符串

时间:2018-07-20 03:56:37

标签: regex string python-2.7

我有一个类似于XML格式的字符串。

上面的字符串包含几个以<SingleProvisioningRequest>开始并以</SingleProvisioningRequest>结尾的子字符串。

在python中有没有一种方法可以将这些子字符串放入列表中。

"<SingleProvisioningRequest><msisdn>919949566686</msisdn>
<serviceId>104900900</serviceId>
<renewalCount>-1</renewalCount>
<isAdvanceRenewal>1</isAdvanceRenewal>
<userName>ad</userName>
<password>ad</password>
<vendorId>1</vendorId>
<circleId>AP</circleId>
<productId>4305</productId>
</SingleProvisioningRequest><SingleProvisioningRequest>
<msisdn>918698291214</msisdn>
<serviceId>20900302900</serviceId>
<renewalCount>-1</renewalCount>
<isAdvanceRenewal>1</isAdvanceRenewal>
<userName>ad</userName>
<vendorId>1</vendorId>
<circleId>MAH</circleId>
<productId>7956</productId>
</SingleProvisioningRequest>"

1 个答案:

答案 0 :(得分:0)

使用此正则表达式(?<=<SingleProvisioningRequest>)[\s\S]+?(?=<\/SingleProvisioningRequest>)

看到它在这里工作,它与您描述的regex101标签之间的任何内容匹配

请注意,它在开始标记处使用了向后搜索,在结束标记处使用了先行搜索。中间的部分是一个非贪婪的技巧,用于匹配两者之间的所有内容。

对于python,这应该可以将匹配项放在列表中:

p = re.compile('(?<=<SingleProvisioningRequest>)[\s\S]+?(?=<\/SingleProvisioningRequest>)')

p.findall('YOUR TEXT HERE')

更新以进行更新(也与标签匹配):regex101

<SingleProvisioningRequest>[\s\S]+?<\/SingleProvisioningRequest>