如何获取括号内的字符串。请参阅下面的代码。
String str = "C1<C2, C3<T1>>.C4<T2>.C5"
我需要得到 C1<C2, C3<T1>>
, C4<T2>
, 和 C5
.
查看下面我尝试的代码
Pattern pat = Pattern.compile("(\\w+(<[^>]+>)?)(.\\w+(<[^>]+>)?)*");
Matcher mat = pat.matcher(str);
但是结果是
C1<C2, C3<T1>
最佳答案
我发现您的代码有 2 个问题:
- 看起来你只打印了第一场比赛而不是
遍历结果。使用
while(mat.find())
迭代 通过匹配列表。 将您的模式简化为
\\w+(<[^>]+>+)?
得到C1<C2, C3<T1>>
,C4<T2>
, 和C5
.正则表达式模式解释:
-
w+
= 1 个或多个字母数字或下划线字符 -
()?
= 括号中的 0 或 1 -
<
= 匹配<
性格 -
[^>]+
= 1 个或多个字符集直到>
性格 -
>+
= 1 个或多个>
字符(如果您只想强制执行一个或两个>{1,2}
字符,则可以使用>
。)
-
您的结果代码应如下所示:
public static void main(String[] args)
{
String str = "C1<C2, C3<T1>>.C4<T2>.C5";
Pattern pat = Pattern.compile("\\w+(<[^>]+>+)?");
Matcher mat = pat.matcher(str);
while(mat.find()) {
System.out.println(mat.group());
}
}
如果你只是想要一个零件列表,一个更简单的方法是使用 split()
而不是正则表达式。您可以在 .
上拆分字符串,将片段保存在一个数组中,然后根据需要遍历该数组。
这将通过以下方式实现:
String[] parts = str.split("\\.");
关于java - 如何在括号内的括号内获取带有Java正则表达式的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41497021/