java - 使用 Regex 和 Java 从文本中提取内容

标签 java regex string text

我有一些这样的文字:

 //(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 是匹配器。 然而,如果文本是这样的,那么它就会中断,因为 Washington,_D.C. (即 m.group(3))中有一个逗号:

(8543,0,'Washington,_D.C.','',''),(8546,0,'Extermination_camp','','')

有人可以帮我修改正则表达式并提取 Washington,_D.C.东西?谢谢

最佳答案

更改第三个捕获组以捕获所有内容,直到到达结束 '。这允许捕获每个字符(包括逗号)。

更新:为了也允许转义',正则表达式如下所示。积分归 Pshemo,请参阅评论。

public final static Pattern r_english = Pattern.compile("\\((.*?),(.*?),('(?:[^']|\\')*'),(.*?),(.*?)\\)");

关于java - 使用 Regex 和 Java 从文本中提取内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40002225/

相关文章:

java - 为什么indexOf对我不起作用有两种方法

Java 在带有 OSX 的 MacBook 上的性能很糟糕,在同一台设备上的 Windows 下表现更差,为什么?

regex - R正则表达式删除除字母、撇号和指定的多字符字符串之外的所有内容

c++ - cin 空间问题

java 以偏移量和长度从 byte 到 int 传输位

java - 找不到符号变量 k

regex - 为什么即使 $foo 匹配模式, `return $foo if/pattern/;` 也不返回 $foo?

java - 如何指示 url 模式中的一个或多个匹配项?

javascript - 用javascript替换字符串中第n次出现的数字

mysql - 获取名称以特定子字符串开头