【发布时间】:2020-02-27 05:47:35
【问题描述】:
我收到了一个不会更改的旧版 xml。 格式化后的样子是这样的:
<Result>
<StepSequence>
<RealMeasure>
<Text value="Batman"/>
</RealMeasure>
</StepSequence>
<StepSequence>
<RealMeasure>
<Text value="Superman"/>
</RealMeasure>
</StepSequence>
</Result>
其实是这样的:
<Result><StepSequence><RealMeasure><Text value="Batman"/></RealMeasure></StepSequence><StepSequence><RealMeasure><Text value="Superman"/></RealMeasure></StepSequence></Result>
我想出的正则表达式是:
<RealMeasure><((\w*)\s+value="(.*)".*?)></RealMeasure>
但它正在选择数据:
<RealMeasure><Text value="Batman"/></RealMeasure></StepSequence><StepSequence><RealMeasure><Text value="Superman"/></RealMeasure>
我要选择:
<RealMeasure><Text value="Batman"/></RealMeasure>
和
<RealMeasure><Text value="Superman"/></RealMeasure>
我想获取组,以便以后可以将匹配转换为:
<RealMeasure type="Text" value="Superman"/>
使用如下模式:
<RealMeasure type="$2" value=$3>
有什么提示可以改进我的正则表达式吗?
【问题讨论】:
-
你在点后面有一个非常贪婪的量词,这意味着它会匹配到最后一个引号。
-
有没有办法提高效率?我不是正则表达式专家。匹配会发生很多,并且会对性能产生影响。如果您可以提出更有效的建议,请添加为答案。
标签: regex regex-lookarounds regex-group regex-greedy