我想用条件解析输入:
<AD(1 to n)>
并<AD> to </AD>
下面是我的代码和输入文本。但是,我没有得到预期的输出。我得到的输出如下
[T, > Primary , ddress , /, T, >, > Primary , ddress Line , ~Primary , ddress Line , ~Primary , ddress Line , ~Primary , ddress Line , ~City~State~Zip Code~Country, /, >; , T, > Office , ddress , /, T, >, > Primary , ddress Line , ~Primary , ddress Line , ~Primary , ddress Line , ~Primary , ddress Line , ~City~State~Zip Code~Country, /, >; , T, > Home , ddress , /, T, >, > Primary , ddress Line , ~Primary , ddress Line , ~Primary , ddress Line , ~Primary , ddress Line , ~City~State~Zip Code~Country, /, >]
public class TestProject {
public static void main(String[] args) {
String address ="<AT1> Primary Address </AT1><AD1> Primary Address Line 1 ~Primary Address Line 2 ~Primary Address Line 3~Primary Address Line 4~City~State~Zip Code~Country</AD1>;\n"
+ "<AT2> Office Address </AT2><AD2> Primary Address Line 1 ~Primary Address Line 2 ~Primary Address Line 3~Primary Address Line 4~City~State~Zip Code~Country</AD2>;\n"
+ "<AT3> Home Address </AT3><AD2> Primary Address Line 1 ~Primary Address Line 2 ~Primary Address Line 3~Primary Address Line 4~City~State~Zip Code~Country</AD2>";
System.out.println(captureValues(address));
}
public static Pattern ptn = Pattern.compile("[^<AD0-9]+");
public static List<String> captureValues(String address)
{
Matcher mtch = ptn.matcher(address);
List<String> ips = new ArrayList<String>();
while(mtch.find())
{
ips.add(mtch.group());
}
return ips;
}
}
正则表达式可能不是最好的工具,但是在给定输入的情况下尝试:
Pattern ptn = Pattern.compile("(?<=<AD(\\d)>).+?(?=</AD\\d>)");
意思是:
(?<=<AD(\\d)>)
-积极的背后<AD(digit)>
,.+?
-任何一个或多个字符,但带有延迟量词,因此它将匹配字符的最小数量,以使整个正则表达式匹配,(?=</AD\\d>)
-积极向前看 </AD(digit)>
第一个数字在捕获组中(\\d)
,因此您仍然可以通过mtch.group(1)
方法来获取它。如果不需要,可以删除括号。
您正则表达式[^<AD0-9]+
是指一个或多个任意字符而不是:数字(0-9
)<
,A
或者D
,这就是为什么你会得到无效的输出,它砍你输入的每处地方的正则表达式不匹配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句