2012-12-25 112 views

回答

6

正则表达式匹配:

(<\s*MessageParam[^>]*)/\s*> 

替换字符串:

$1></MessageParam> 

您可能需要转义\字符(在其之前添加一个额外的\)。

我假设>没有出现在属性的值中,并且XML是有效的。

更广义的版本:

正则表达式匹配:

<\s*([^\s>]+)([^>]*)/\s*> 

替换字符串:

<$1$2></$1> 

对于这一个,我不知道,我所做的所有假设的。但我仍然认为>没有出现在属性的值中,并且XML是有效的。

+0

我不确定XML解析器是否可以更改结束标记的类型。如果可能的话,最好使用XML解析器。 – nhahtdh

+0

你也可以单独捕获'MessageParam'使其得到推广。 –

+0

@RohitJain:编辑。谢谢。 – nhahtdh

4

正则表达式

<(\w+)(.+?)/> 

<$1$2></$1> 
+0

这真的对我有帮助,因为接受的答案产生了一些偶尔的奇怪结果 – jcvandan

+0

不幸的是,这对嵌套的DOM元素不起作用。 – jtheletter

+0

完美!正是我在找什么。只需在Notepad ++中使用此查找和替换功能,就可以完成:) – Pixipulp

0
public static void format(String xmlNode) { 
    Pattern patt = Pattern.compile("(<MessageParam[^>]*)(\\s*/>)"); 
    Matcher mattcher = patt.matcher(xmlNode); 
    while (mattcher.find()){ 
     String result = mattcher.replaceAll("$1></MessageParam>"); 
     System.out.println(result); 
    } 
} 
+0

String类中的一个简单'replaceAll'将会执行,不知道为什么要经历编写模式/匹配器的所有麻烦循环。 – nhahtdh

+0

哦,我的愚蠢的答案:( – prageeth

+0

nhahtdh - 我不明白如何replaceAll将有助于如果我有多个字符串与不同'desc' – user864309