notepad ++中的xml正则表达式字符串。如何查找不在特定父级内的标记

时间:2014-08-28 09:15:47

标签: xml regex notepad++

我有以下格式的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>内的内容?

3 个答案:

答案 0 :(得分:1)

Demo

(?<!<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>

这应该让你工作。

参见演示。

http://regex101.com/r/cN9bJ4/2