我在java中使用正则表达式。
我想提取我想要的单词。
示例)String exam = "..aa.aaa..bb.."
我想提取"..aa.aaa.."
而不是"..aa.aaa..bb.."
所以我尝试像"(\\.\\.[a-z])([a-z]\\.\\.)"
但是,程序返回句"..aa.aaa..bb.."
我该怎么办?
=============================================== =================== 这是完整的来源
public class test {
public static void main(String ar[]) throws java.io.IOException {
String regex = "(\\.\\.[a-zA-Z0-9])[^\\.]*\\.[^\\.]+{2,}.*([a-z]{2,}\\.\\.)";
String useStr = "..aa.aaa..bb..";
Pattern pattern = Pattern.compile(regex);
Matcher match = pattern.matcher(useStr);
while (match.find()) {
String a = useStr.substring(match.start(), match.end());
System.out.println(a);
}
}
}
答案 0 :(得分:0)
我在中间的[^\\.]*\\.[^\\.]+{2,}.*
附近放置括号,并将其捕获到第2组,然后将第一组和第二组连接成字符串a。
我不确定这是否是您想要的确切模式,但它是正确的字符串。
public class test {
public static void main(String ar[]) throws java.io.IOException {
String regex = "(\\.\\.[a-zA-Z0-9])([^\\.]*\\.[^\\.]+{2,}.*)([a-z]{2,}\\.\\.)";
String useStr = "..aa.aaa..bb..";
Pattern pattern = Pattern.compile(regex);
Matcher match = pattern.matcher(useStr);
while (match.find()) {
//String a = useStr.substring(match.start(), match.end());
String a = match.group(1) + match.group(2);
System.out.println(a);
}
}
}
这会将a
设置为..aa.aaa..
并随后打印出来:{{1}}
答案 1 :(得分:0)
这是我在评论中提到的正则表达式的解决方案。 firstTwoDots
匹配由..
的前两次出现划分的子字符串,而dotsAndAs
匹配由.
和a
组成的所有内容:
public static void main(String ar[]) {
String firstTwoDots = "([.]{2})(.*?)([.]{2}).*";
String dotsAndAs = "([.a]*).*";
String useStr = "..aa.aaa..bb..";
Matcher matcher = Pattern.compile(firstTwoDots).matcher(useStr);
if (matcher.matches()) System.out.println(matcher.group(1) + matcher.group(2) + matcher.group(3));
matcher = Pattern.compile(dotsAndAs).matcher(useStr);
if (matcher.matches()) System.out.println(matcher.group(1));
}