您好,我无法获取字符串的第三个元素(F604080)
<sourceDocumentId>AX02_APF604_F604080</sourceDocumentId>
我已经尝试过使用这种正则表达式和变体,但是我可以设法获得 F604080。
(?<=\w+_)\w+(?=\<)
(?<=\w+_\w+_)\w+(?=\<)
....
任何帮助将不胜感激。 谢谢。
答案 0 :(得分:1)
使用regex
可以使用类似>\w+_\w+_(\w+)<\/
String str = "<sourceDocumentId>AX02_APF604_F604080</sourceDocumentId>";
String code = null;
Matcher m = Pattern.compile(">\\w+_\\w+_(\\w+)</").matcher(str);
if (m.find()) {
code = m.group(1);
}
只需使用substring()
操作
String code = str.substring(str.lastIndexOf('_') + 1, str.lastIndexOf('<'));
如果稍后使用更多元素解析XML
,则可以使用类似Java DOM Parser XML
的方法,但这并不是最佳选择,因为您只有一个元素
答案 1 :(得分:1)
您不需要回头或向前看,只需使用此简单的正则表达式,
.*_(\w+)
并捕获第1组。
Java代码
public static void main(String[] args) {
String s = "<sourceDocumentId>AX02_APF604_F604080</sourceDocumentId>";
Pattern p = Pattern.compile(".*_(\\w+)");
Matcher m = p.matcher(s);
if (m.find()) {
System.out.println(m.group(1));
} else {
System.out.println("Didn't match");
}
}
根据需要打印此内容。
F604080
答案 2 :(得分:0)
您可以使用“ _”作为分隔符并使用第3个元素来解析字符串吗?
答案 3 :(得分:0)
您的两个正则表达式似乎都与给定的字符串匹配。
无论如何,您可能对此更加具体:
^(?:<\w+>)(?:\w+)_(?:\w+)_(\w+)(?:<\/\w+>)$
请确保输入的内容是您认为的字符串,并且此后没有给出其他文本。