我有以下格式的XML标记
<saw:column columnID="c83" xsi:type="saw:regularColumn">
<saw:displayFormat>
<saw:formatSpec visibility="hidden" suppress="default" interaction="default" wrapText="true"/>
</saw:displayFormat>
<saw:columnHeading>
<saw:displayFormat>
<saw:formatSpec interaction="default"/>
</saw:displayFormat>
</saw:columnHeading>
<saw:columnFormula>
<sawx:expr xsi:type="sawx:sqlExpression">max("Supply Fact"."Count")</sawx:expr></saw:columnFormula>
</saw:column>
我必须替换标记<saw:displayFormat></saw:displayFormat>
标记位于<saw:column>
标记内,也是<saw:columnHeading>
的子标记。我不想替换columnHeading中的displayformat标签,但想要替换saw:column
我试过了<saw:displayFormat>.*?</saw:displayFormat>
。这将获取所有显示格式标记。
如何省略<saw:columnHeading>
内的内容?
答案 0 :(得分:1)
(?<!<saw:columnHeading>).<saw:displayFormat>(.*?)<\/saw:displayFormat>.(?!<\/saw:columnHeading>)
它应与您的搜索匹配,而不会被columHeading标记包围。
之前和之后需要.
来匹配换行符
答案 1 :(得分:0)
虽然试图用正则表达式解析xml是一个坏主意,但这在Notepad ++中适用于我。它假设\r\n
标记和columnHeading
标记之间没有任何内容(包括displayFormat
之外的空格)。
(?<!<saw:columnHeading>\r\n)<saw:displayFormat>.*?</saw:displayFormat>
答案 2 :(得分:0)
(?!(?!.*?<saw:columnHeading>))<saw:displayFormat>(.*?)<\/saw:displayFormat>
这应该让你工作。
参见演示。