Java 避免在xml元素名称中使用前导数字
我希望有一个Java方法来替换xml元素名称中的前导数字。例如,Java 避免在xml元素名称中使用前导数字,java,regex,xml,Java,Regex,Xml,我希望有一个Java方法来替换xml元素名称中的前导数字。例如,25K需要转换为25K。请看一下我的方法: public static String removeLeadNumbersFromXMLTagElements(String xml) throws TransformerException { Pattern p = Pattern.compile("(<[^>]*?[^[0-9]][^>]*?>)"); Matcher m =
25K
需要转换为25K
。请看一下我的方法:
public static String removeLeadNumbersFromXMLTagElements(String xml) throws TransformerException {
Pattern p = Pattern.compile("(<[^>]*?[^[0-9]][^>]*?>)");
Matcher m = p.matcher(xml);
StringBuffer result = new StringBuffer();
while (m.find()) {
String replace = m.group().replaceAll("[^[0-9]]+", "a");
m.appendReplacement(result, replace);
}
m.appendTail(result);
return result.toString();
}
公共静态字符串removeReadNumbersFromXMLTagElements(字符串xml)引发TransformerException{
Pattern p=Pattern.compile(“(]*?[^[0-9]][^>]*?>)”;
Matcher m=p.Matcher(xml);
StringBuffer结果=新的StringBuffer();
while(m.find()){
字符串replace=m.group();
m、 附件替换(结果,替换);
}
m、 附尾(结果);
返回result.toString();
}
但是我的方法的结果是:
25K
。你能帮我用正确的正则表达式吗?提前谢谢。所以这并不是您想要的,但它应该可以解决问题。它将获取标签,然后删除任何前导数字,但不删除任何其他内容。此代码替换while循环。您的代码可以识别标记,但是(正如您所指出的)它正在替换所有数字,而不仅仅是前导数字
while (m.find()) {
//System.out.println(m.group());
String work = m.group();
String replace = m.group();
if (work.substring(0, 2).equals("</")) {
//System.out.println("end tag");
if (work.length() > 2 && Character.isDigit(work.charAt(2))) {
replace = "</a";
int i = 3;
while (i < work.length() && Character.isDigit(work.charAt(i))) {
i++;
}
replace += work.substring(i);
}
} else if (work.substring(0, 1).equals("<")) {
//System.out.println("begin tag");
if (work.length() > 1 && Character.isDigit(work.charAt(1))) {
replace = "<a";
int i = 2;
while (i < work.length() && Character.isDigit(work.charAt(i))) {
i++;
}
replace += work.substring(i);
}
}
m.appendReplacement(result, replace);
}
while(m.find()){
//System.out.println(m.group());
串功=m.group();
字符串替换=m.group();
如果(work.substring(0,2).equals(),请尝试使用以下命令:
public static String removeLeadNumbersFromXMLTagElements(String xml) throws TransformerException {
Pattern p = Pattern.compile("(\\<.*?)[0-9]+(.*?\\>)");
Matcher m = p.matcher(xml);
StringBuffer result = new StringBuffer();
while (m.find()) {
String replace = m.group(1) + "a" + m.group(2);
m.appendReplacement(result, replace);
}
m.appendTail(result);
return result.toString();
}
公共静态字符串removeReadNumbersFromXMLTagElements(字符串xml)引发TransformerException{
模式p=Pattern.compile(“(\\)”);
Matcher m=p.Matcher(xml);
StringBuffer结果=新的StringBuffer();
while(m.find()){
字符串替换=m组(1)+“a”+m组(2);
m、 附件替换(结果,替换);
}
m、 附尾(结果);
返回result.toString();
}
我的解决方案:我终于发现我可以使用字符串replace=m.group().replaceFirst([^[0-9]]+“,“a”)
而不是replaceAll
。这也很有效!非常感谢你!很好的解决方案!最好的回复这个解决方案与我的非常相似,谢谢你!最好的问候!