java 开发 xml中使用正则表达式实现一段文本替换。主要是要实现文本对齐和缩进。
比如说我有着一些代码(注意不同缩进):1.<TemplateId>Tag</TemplateId><Name>HTMLTag</Name><Propertyname="s...
比如说我有着一些代码(注意不同缩进):
1.
<TemplateId>Tag</TemplateId>
<Name>HTML Tag</Name>
<Property name="self_close">
<Boolean>false</Boolean>
</Property>
2.
<TemplateId>Tag</TemplateId>
<Name>HTML Tag</Name>
<Property name="self_close">
<Boolean>false</Boolean>
</Property>
3.
<TemplateId>Tag</TemplateId>
<Name>HTML Tag</Name>
<Property name="self_close">
<Boolean>false</Boolean>
</Property>
要统一替换成:
<TemplateId>Tag</TemplateId>
<Name>HTML Tag</Name>
<Property name="self_close">
<Boolean>false</Boolean>
</Property>
这个样式包含了上面三个(或者更多),即如果<TemplateId>Tag</TemplateId>有缩进,下面的要保持一致的缩进,如何实现?
PS:现在以以下格式(一行无空格)对以上三种(或者更多)实现选择:
<TemplateId>Tag</TemplateId>\R\S\S<Name>HTML Tag</Name>\R<Property name="self_close">\R<Boolean>false</Boolean>\R</Property>
(无\S\S)
要实现替换后以上三种效果为:
1.
<TemplateId>Tag</TemplateId>
<Name>HTML Tag</Name>
<Property name="self_close">
<Boolean>false</Boolean>
</Property>
2.
<TemplateId>Tag</TemplateId>
<Name>HTML Tag</Name>
<Property name="self_close">
<Boolean>false</Boolean>
</Property>
3.
<TemplateId>Tag</TemplateId>
<Name>HTML Tag</Name>
<Property name="self_close">
<Boolean>false</Boolean>
</Property> 展开
1.
<TemplateId>Tag</TemplateId>
<Name>HTML Tag</Name>
<Property name="self_close">
<Boolean>false</Boolean>
</Property>
2.
<TemplateId>Tag</TemplateId>
<Name>HTML Tag</Name>
<Property name="self_close">
<Boolean>false</Boolean>
</Property>
3.
<TemplateId>Tag</TemplateId>
<Name>HTML Tag</Name>
<Property name="self_close">
<Boolean>false</Boolean>
</Property>
要统一替换成:
<TemplateId>Tag</TemplateId>
<Name>HTML Tag</Name>
<Property name="self_close">
<Boolean>false</Boolean>
</Property>
这个样式包含了上面三个(或者更多),即如果<TemplateId>Tag</TemplateId>有缩进,下面的要保持一致的缩进,如何实现?
PS:现在以以下格式(一行无空格)对以上三种(或者更多)实现选择:
<TemplateId>Tag</TemplateId>\R\S\S<Name>HTML Tag</Name>\R<Property name="self_close">\R<Boolean>false</Boolean>\R</Property>
(无\S\S)
要实现替换后以上三种效果为:
1.
<TemplateId>Tag</TemplateId>
<Name>HTML Tag</Name>
<Property name="self_close">
<Boolean>false</Boolean>
</Property>
2.
<TemplateId>Tag</TemplateId>
<Name>HTML Tag</Name>
<Property name="self_close">
<Boolean>false</Boolean>
</Property>
3.
<TemplateId>Tag</TemplateId>
<Name>HTML Tag</Name>
<Property name="self_close">
<Boolean>false</Boolean>
</Property> 展开
展开全部
这个可以
但是 要替换几遍
第1次 把空白符号 全部替换成空(这时候全部xml都会在一行上了)
第2次 找到</xxx>或/>结尾的在尾部增加一个换行
第3次 比较关键,你要用到正则表达式的[环视],也就是你要找到 <xxx></xxx>或<xxx />字样的,而且这段字符的前面必须符合<xxx>后面符合</xxx>那么认为这段字符是子标签 就在头部插一个\t制表符 或者你喜欢的N个空格
当然文字描述得比较不细致 细节方面你自己把握吧
然后给你贴一个 环视的 说明 具体自己再查查网页
(?<=Expression) 逆序肯定环视,表示所在位置左侧能够匹配Expression
(?<!Expression) 逆序否定环视,表示所在位置左侧不能匹配Expression
(?=Expression) 顺序肯定环视,表示所在位置右侧能够匹配Expression
(?!Expression) 顺序否定环视,表示所在位置右侧不能匹配Expression
但是 要替换几遍
第1次 把空白符号 全部替换成空(这时候全部xml都会在一行上了)
第2次 找到</xxx>或/>结尾的在尾部增加一个换行
第3次 比较关键,你要用到正则表达式的[环视],也就是你要找到 <xxx></xxx>或<xxx />字样的,而且这段字符的前面必须符合<xxx>后面符合</xxx>那么认为这段字符是子标签 就在头部插一个\t制表符 或者你喜欢的N个空格
当然文字描述得比较不细致 细节方面你自己把握吧
然后给你贴一个 环视的 说明 具体自己再查查网页
(?<=Expression) 逆序肯定环视,表示所在位置左侧能够匹配Expression
(?<!Expression) 逆序否定环视,表示所在位置左侧不能匹配Expression
(?=Expression) 顺序肯定环视,表示所在位置右侧能够匹配Expression
(?!Expression) 顺序否定环视,表示所在位置右侧不能匹配Expression
追问
能举个例子吗?环视?
追答
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args){
String pattern = "(?)[^)";
String text = "aaabbbccc";
Pattern p = Pattern.compile(pattern);
Matcher matcher= p.matcher(text);
while(matcher.find()){
System.out.println(matcher.group());
}
}
}
比如说你这种情况 你要获取div标签种的内容 也就是例子里的aaa ccc 而不是aaa
所以你就需要正则用到环视,表示了 你所描述的字样左边应该是怎么样的 右边是怎么样的 这样才能匹配
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询