我正在使用Java使用正则表达式处理文本。我正在使用以下正则表达式
^[\([0-9a-zA-Z]+\)\s]+
匹配括号中的一个或多个字母或数字一次或多次。例如,我想匹配(aaa)(bb)(11)(AA)(iv)或(111)(aaaa)(i)(V)
我在http://java-regex-tester.appspot.com/上测试了此正则表达式,它正在工作。但是,当我在代码中使用它时,代码不会编译。这是我的代码:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Tester {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("^[\([0-9a-zA-Z]+\)\s]+");
String[] words = pattern.split("(a) (1) (c) (xii) (A) (12) (ii)");
String w = pattern.
for(String s:words){
System.out.println(s);
}
}
}
我尝试使用\代替\,但是正则表达式给出的结果与我预期的结果不同(它仅匹配(aaa)这样的一个组而不匹配(aaa)(111)(ii)的多个组)。
两个问题:
这是我的最终解决方案,以匹配出现在行首的方括号中的各个字母/数字组,而忽略其余的
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Tester {
static ArrayList<String> listOfEnums;
public static void main(String[] args) {
listOfEnums = new ArrayList<String>();
Pattern pattern = Pattern.compile("^\\([0-9a-zA-Z^]+\\)");
String p = "(a) (1) (c) (xii) (A) (12) (ii) and the good news (1)";
Matcher matcher = pattern.matcher(p);
boolean isMatch = matcher.find();
int index = 0;
//once you find a match, remove it and store it in the arrayList.
while (isMatch) {
String s = matcher.group();
System.out.println(s);
//Store it in an array
listOfEnums.add(s);
//Remove it from the beginning of the string.
p = p.substring(listOfEnums.get(index).length(), p.length()).trim();
matcher = pattern.matcher(p);
isMatch = matcher.find();
index++;
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句