输入 - [1、1111、2020、宝马、Frontier、扩展驾驶室皮卡 2-DR、银色、16558]
我想在这里提取 BMW 并且我正在使用 (^(?:[^\\,]*\\,){3})
这个正则表达式。
结果是 - BMW,Frontier,EXTENDED CAB PICKUP 2-DR,Silver,16558]
。
有人可以帮我解决这个问题吗?提前致谢
最佳答案
由于您只能输入模式而不使用组,因此您可以使用有限重复,例如 {0,1000}
在正向回顾中,因为 Java 不支持无限重复。
(?<=^\\[[^,]{0,1000},[^,]{0,1000},[^,]{0,1000},\\h{0,10})\\w{3,10}(?=[^\\]\\[]*\\])
说明
-
(?<=
正向后看,断言左边的是-
^\[
字符串开头,匹配[
-
[^,]{0,1000},[^,]{0,1000},[^,]{0,1000},
匹配除,
之外的任何字符 3 次接下来是,
-
\h{0,10}
匹配 0-10 次水平空白字符
-
-
)
密切回顾 -
\w{3,10}
匹配 3-10 个单词字符 -
(?=
正向前瞻,断言右边是什么-
[^\]\[]*\]
匹配直到]
-
-
)
关闭前瞻
代码示例
final String regex = "(?<=^\\[[^,]{0,1000},[^,]{0,1000},[^,]{0,1000},\\h{0,10})\\w{3,10}(?=[^\\]\\[]*\\])";
final String string = "[1, 1111, 2020, BMW, Frontier, EXTENDED CAB PICKUP 2-DR, Silver, 16558]";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println(matcher.group(0));
}
输出
BMW
关于java - 使用正则表达式从java中的逗号分隔字符串中提取特定单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61695276/