我正在尝试在sublime 3中使用正则表达式,以删除两个字符串之间的所有内容,即XML文件。
假设这是我的内容:
<Body name="ground">
<mass>0</mass>
<mass_center> 0 0 0</mass_center>
<inertia_xx>0</inertia_xx>
<inertia_yy>0</inertia_yy>
<inertia_zz>0</inertia_zz>
<inertia_xy>0</inertia_xy>
<inertia_xz>0</inertia_xz>
<inertia_yz>0</inertia_yz>
<!--Joint that connects this body with the parent body.-->
<Joint />
<VisibleObject>
<!--Set of geometry files and associated attributes, allow .vtp, .stl, .obj-->
<GeometrySet>
<objects />
<groups />
</GeometrySet>
<!--Three scale factors for display purposes: scaleX scaleY scaleZ-->
<scale_factors> 1 1 1</scale_factors>
<!--transform relative to owner specified as 3 rotations (rad) followed by 3 translations rX rY rZ tx ty tz-->
<transform> -0 0 -0 0 0 0</transform>
<!--Whether to show a coordinate frame-->
<show_axes>false</show_axes>
<!--Display Pref. 0:Hide 1:Wire 3:Flat 4:Shaded Can be overriden for individual geometries-->
<display_preference>4</display_preference>
</VisibleObject>
<WrapObjectSet>
<objects />
<groups />
</WrapObjectSet>
</Body>
现在假设我要删除<VisibleObject>
和</VisibleObject>
之间的所有内容,只留下:
<Body name="ground">
<mass>0</mass>
<mass_center> 0 0 0</mass_center>
<inertia_xx>0</inertia_xx>
<inertia_yy>0</inertia_yy>
<inertia_zz>0</inertia_zz>
<inertia_xy>0</inertia_xy>
<inertia_xz>0</inertia_xz>
<inertia_yz>0</inertia_yz>
<!--Joint that connects this body with the parent body.-->
<Joint />
<VisibleObject>
</VisibleObject>
<WrapObjectSet>
<objects />
<groups />
</WrapObjectSet>
</Body>
对于上述问题,有一些类似的线程和问题,但是对于这个问题,它们似乎都没有特别好(或根本没有)。
非常感谢任何帮助。
答案 0 :(得分:3)
答案 1 :(得分:1)
这意味着你应该能够使用PCRE提供的炫酷技巧(主要是负面预测)。这可以大大加快性能。
我推荐的正则表达式是:
<VisibleObject>(?:[^<]*(?!</VisibleObject).)+</VisibleObject>
基本上,负前瞻确保每当<
出现时(即在标签的开头),它就不是结束</VisibleObject>
。
需要.
,以便当负面预测看到结束标记时,引擎可以回溯一个字符。
您需要使用替换<VisibleObject></VisibleObject>
。