使用正则表达式删除两个字符串之间的所有内

时间:2016-08-15 17:53:36

标签: regex xml sublimetext3

我正在尝试在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>

对于上述问题,有一些类似的线程和问题,但是对于这个问题,它们似乎都没有特别好(或根本没有)。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

带有崇高窗口的图像:

Sublime Regex

您可以通过查找找到它,然后替换,并确保勾选最左上角的选项。

答案 1 :(得分:1)

根据this page.

,Sublime似乎使用了PCRE

这意味着你应该能够使用PCRE提供的炫酷技巧(主要是负面预测)。这可以大大加快性能。

我推荐的正则表达式是:

<VisibleObject>(?:[^<]*(?!</VisibleObject).)+</VisibleObject>

基本上,负前瞻确保每当<出现时(即在标签的开头),它就不是结束</VisibleObject>

需要.,以便当负面预测看到结束标记时,引擎可以回溯一个字符。

您需要使用替换<VisibleObject></VisibleObject>