我是Java中正则表达式的新手。我喜欢使用正则表达式提取字符串。
这是我的字符串:“Hello,World”
我喜欢在“,”之后提取文本。结果将是“世界”。我试过这个:
final Pattern pattern = Pattern.compile(",(.+?)");
final Matcher matcher = pattern.matcher("Hello,World");
matcher.find();
但是下一步会是什么?
答案 0 :(得分:3)
你不需要Regex。您可以简单地在逗号上拆分并从数组中获取第二个元素: -
System.out.println("Hello,World".split(",")[1]);
输出: -
World
但是如果您想使用Regex
,则需要从正则表达式中删除?
。
?
用于+
匹配后的 Reluctant
。它将仅匹配W
并停在那里。
你不需要这里。你需要匹配,直到它匹配。
请改用 greedy
匹配。
以下是修改后的正则表达式的代码: -
final Pattern pattern = Pattern.compile(",(.+)");
final Matcher matcher = pattern.matcher("Hello,World");
if (matcher.find()) {
System.out.println(matcher.group(1));
}
输出: -
World
答案 1 :(得分:1)
扩展您拥有的内容,您需要从模式中删除?符号以使用贪婪匹配,然后处理匹配的组:
final Pattern pattern = Pattern.compile(",(.+)"); // removed your '?'
final Matcher matcher = pattern.matcher("Hello,World");
while (matcher.find()) {
String result = matcher.group(1);
// work with result
}
其他答案提出了解决问题的不同方法,可能会为您提供更好的解决方案。
答案 2 :(得分:0)
System.out.println( "Hello,World".replaceAll(".*,(.*)","$1") ); // output is "World"
答案 3 :(得分:0)
您使用的是一个不情愿的表达式,只会选择一个字符W
,而您可以使用贪心一个并打印匹配的组内容:
final Pattern pattern = Pattern.compile(",(.+)");
final Matcher matcher = pattern.matcher("Hello,World");
if (matcher.find()) {
System.out.println(matcher.group(1));
}
输出:
World