【发布时间】:2016-02-24 21:39:52
【问题描述】:
我有一个文件,其中包含一些遵循特定模式的 xml 标签(名称和道具是占位符)
<Name id="mod:Name"/>
<Prop1 Name id="mod:object.Prop1 Name"/>
<Prop1 Prop2 Name id="mod:object.Prop1 Prop2 Name"/>
<Prop1 Prop2 Prop3 Name id="mod:object.Prop1 Prop2 Prop3 Name"/>
我正在寻找正则表达式以从“id=...”之前的部分中删除空格
这应该是什么样子
<Name id="mod:Name"/>
<Prop1Name id="mod:object.Prop1 Name"/>
<Prop1Prop2Name id="mod:object.Prop1 Prop2 Name"/>
<Prop1Prop2Prop3Name id="mod:object.Prop1 Prop2 Prop3 Name"/>
我已经看到 (\S+)\s(?=\S+\s+) 示例,替换只是 \1 但这会删除除最后一个空格之外的所有空格,并且不会在 id= 之前留下空格
<Name id="mod:Name"/>
<Prop1Name id="mod:object.Prop1 Name"/>
<Prop1Prop2Name id="mod:object.Prop1Prop2 Name"/>
<Prop1Prop2Prop3Name id="mod:object.Prop1Prop2Prop3 Name"/>
我尝试了类似的东西
^((\S+)*)\s((\S+)*)\s((\S+)*)\s((\S+)*)\s(?=id)
但这给了我灾难性的回溯
不确定是否有帮助,但 Sublime 使用 Boost 正则表达式
关于 The Stack 的第一个问题,欢迎对问题进行任何改进
谢谢
这似乎有效
^(?|((\S+))\s|((\S+)\s(\S+))\s|((\S+)\s(\S+)\s(\S+)\s))(id=.*)
替换$2$3$4 $5
谢谢你的建议
【问题讨论】:
-
你能使用像 JavaScript 这样的语言吗?你不能使用纯正则表达式 (除非在字符串上多次应用正则表达式) .. 但是如果你使用像 Javascript 这样的语言,你可以使用
.replace和callback来做你想做的事需要。 -
你能举个例子吗?
-
第二个代码块是结果应该是什么样子,我将编辑和突出显示
-
感谢@Shafizadeh 的建议,您再次发布的正则表达式是什么
-
您可以在 SublimeText 中轻松做到这一点。不是
^(?|((\S+))\s|((\S+)\s(\S+))\s|((\S+)\s(\S+)\s(\S+)\s))(id=.*)
标签: regex boost sublimetext3