首页 > 解决方案 > 正则表达式选择不带括号的点之间的组

问题描述

我有这样的字符串:

test.as123[13].tdfv
Parent.child1
test.d12[0].asdf

我需要一个正则表达式,它可以让我得到这样的组:

所以我需要在点上划分组,并删除其名称中的括号。

我尝试使用这样的否定:

([^\W\d]+)

但是结果会有孩子,而不是孩子1。

我的问题是我不确定如何忽略特定的字符串\[\d\]并继续匹配\d

我尝试使用负前瞻,但我认为我做错了什么。这是我的尝试:

\w+(?!\[[0-9]*?\])

例如,这确实匹配:

标签: javaregex

解决方案


您可以删除方括号内所有出现的数字,然后在一个点上拆分:

.replaceAll("\\[\\d+]", "").split("\\.")

或者,您可以直接在模式上拆分(?:\[\d+])?\.

.split("(?:\\[\\d+])?\\.")

它匹配

  • (?:\[\d+])?[- a , 1+ 位的可选出现,]
  • \.- 一个点。

在线查看Java 演示

String s = "test.as123[13].tdfv";
String results[] = s.replaceAll("\\[\\d+]", "").split("\\.");
System.out.println(Arrays.toString(results));
// => [test, as123, tdfv]

String results2[] = s.split("(?:\\[\\d+])?\\.");
System.out.println(Arrays.toString(results2));
// => [test, as123, tdfv]

推荐阅读