是否有可能检查匹配(顺便说一下是可选的)但是不将它包含在结果组中?
示例:
文本:94km SSE of Taron, Papua New Guinea
正则表达式:^[.*\sof]?(.*)$
然后m.group()返回整场比赛,但我只想"巴布亚新几内亚"
我已经尝试过了:
^(?:*\sof)?(.*)$
但没有积极的结果。
提前感谢。
答案 0 :(得分:2)
你的正则表达式有效:
Taron, Papua New Guinea
输出:
m.group()
请注意m.group(1)
会返回整个匹配项。要使第一组使用C#
答案 1 :(得分:1)
尝试使用正面lookbehind
Pattern p = Pattern.compile("(?<=\\bof\\b)(.*)");
Matcher m = p.matcher("94km SSE of Taron, Papua New Guinea");
if (m.find()) {
System.out.println(m.group());
}
产地:
Taron, Papua New Guinea
答案 2 :(得分:0)
实际上,你不能(或不应该)获得匹配部分之外的任何东西。所以,你只需要将它包含在regexp中。我认为这会奏效:
Pattern pattern=Pattern.compile("(.*\\sof\\s.*,\\s)?(.*)");
Matcher matcher;
matcher=pattern.matcher(text);
return matcher.group(2);
注意:我想你要设置&#34;&#34;作为分隔符,但你做错了:这个正则表达式:
^[.*\sof]
表示&#34;任何不是空白的字符,或者&#39; o&#39;或者是&#39; f&#39;或任何其他。在[abcd]
区间内,字符意味着失去了它们的顺序。
答案 3 :(得分:0)
根据巴布亚新几内亚的要求&#34;使用正则表达式\w[^,]+$.*
String str = "94km SSE of Taron, Papua New Guinea";
Pattern pattern = Pattern.compile("\\w[^,]+$.*");
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.find()?matcher.group():"Not Found");