【发布时间】:2019-02-01 16:30:27
【问题描述】:
给定一些输入数据:
<somexml>
<User Name="MrFlibble">
<Option Name="Pass">SomeSaltedPassword</Option>
<Option Name="Salt">Salt</Option>
<tag1></tag1>
<Permissions>
<Permission Dir="E:"></Permission>
</Permissions>
</User>
<User Name="MrFlobble">
<Option Name="Pass">SomeOtherSaltedPassword</Option>
<Option Name="Salt">Salt</Option>
<tag1></tag1>
<Permissions>
<Permission Dir="C:"></Permission>
</Permissions>
</User>
</somexml>
我想用Jon和SomeSaltedPassword替换用户区域中没有C:权限的第一个用户(在本例中为MrFlibble)和SomeSaltedPassword使用.net框架正则表达式给出以下结果:
<somexml>
<User Name="Jon">
<Option Name="Pass">MyNewSaltedPassword</Option>
<Option Name="Salt">Salt</Option>
<tag1></tag1>
<Permissions>
<Permission Dir="E:"></Permission>
</Permissions>
</User>
<User Name="MrFlobble">
<Option Name="Pass">SomeOtherSaltedPassword</Option>
<Option Name="Salt">Salt</Option>
<tag1></tag1>
<Permissions>
<Permission Dir="C:"></Permission>
</Permissions>
</User>
</somexml>
我认为像这样的正则表达式会捕获用户并将我想要替换的部分分组:
<User Name="(.*)">.*<Option Name="Pass">(.*)<\/Option>.*<Option Name="Salt">(.*)<\/Option>.*<\/User>
...但我正在努力寻找如何在保留其他文本的同时替换这三个组。 The docs 似乎都建议用特定的新文本替换原始文本的修改,而不是多个特定命名的组。
有没有标准的方法可以做到这一点,还是我找错了树?
【问题讨论】:
-
用正则解析HTML是邪恶的,相当于杀了一只小猫。
-
谢谢。很有帮助。那你会怎么解决呢?
-
是什么阻止你做一个简单的替换?即找到
Name="MrFlibble"并替换为Name="Jon" -
不保证最初是
MrFlibble,我不想匹配条目中的C:。我应该在问题中说明这一点。现在会这样做。