我有一些这样的文字:
//(10,0,'Computer_accessibility','',''),(13,0,'History_of_Afghanistan','',''),(14,0,'Geography_of_Afghanistan','','')
我写了一个模式:
public final static Pattern r_english = Pattern.compile("\\((.*?),(.*?),(.*?),(.*?),(.*?)\\)");
这在Java中很好地提取m.group(1)(例如13)和m.group(3)(例如History_of_Afghanistan),其中m是匹配器。 但是,如果文本是这样的话就会打破,因为华盛顿,_D.C。 (即m.group(3))中有一个逗号:
(8543,0,'Washington,_D.C.','',''),(8546,0,'Extermination_camp','','')
有人可以帮助我使用正则表达式修改它并提取华盛顿,_D.C。啄?感谢
答案 0 :(得分:3)
更改第三个捕获组以捕获所有内容,直到达到结束'
。这样就可以捕获每个角色(包括你的逗号)。
更新:为了允许转义'
,正则表达式看起来像这样。积分转到Pshemo,请参阅评论。
public final static Pattern r_english = Pattern.compile("\\((.*?),(.*?),('(?:[^']|\\')*'),(.*?),(.*?)\\)");
答案 1 :(得分:1)
您应该帮助使您的RegEx更具针对性。 例如:
((.*?),(.*?),('.*?'),('.*?'),('.*?'))
我使用了parantehesis '
,这个解决方案对于3-5组的进一步调整也是不可知的。
此致
答案 2 :(得分:1)
您需要更改正则表达式以适合您要检索的所有匹配项,例如:
/((.*?),(.*?),'(.*?)','(.*?)','(.*?)'\)/g
工作示例@ regex101
您需要将上述正则表达式转换/转义为兼容Java的表达式,例如:
public static String REGEX_PATTERN = "\\((.*?),(.*?),'(.*?)','(.*?)','(.*?)'\\)";
然后,迭代尝试模仿//g
修饰符的所有匹配项,例如:
while (matcher.find()) {
}
Java工作示例:
package SO40002225;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static String INPUT;
public static String REGEX_PATTERN;
static {
INPUT = "(8543,0,'Washington,_D.C.','',''),(8546,0,'Extermination_camp','',''),(8543,0,'Washington,_D.C.','',''),(8546,0,'Extermination_camp','','')";
REGEX_PATTERN = "\\((.*?),(.*?),'(.*?)','(.*?)','(.*?)'\\)";
}
public static void main(String[] args) {
String text = INPUT;
Pattern pattern = Pattern.compile(REGEX_PATTERN);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
String mg1 = matcher.group(1);
String mg2 = matcher.group(2);
String mg3 = matcher.group(3);
String mg4 = matcher.group(4);
String mg5 = matcher.group(5);
System.out.println("Matching group #1: " + mg1);
System.out.println("Matching group #2: " + mg2);
System.out.println("Matching group #3: " + mg3);
System.out.println("Matching group #4: " + mg4);
System.out.println("Matching group #5: " + mg5);
}
}
}
在正则表达式中删除了逗号,
的转义,正如Pshemo所指出的,,
不是元字符,或者它没有在< strong>限制重复量词:{min, max}