java - 如何在括号内的括号内获取带有Java正则表达式的字符串

标签 java regex

如何获取括号内的字符串。请参阅下面的代码。

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 个问题:

  1. 看起来你只打印了第一场比赛而不是 遍历结果。使用 while(mat.find())迭代 通过匹配列表。
  2. 将您的模式简化为 \\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/

相关文章:

javascript - 从 POST 响应中删除评论标签

javascript - 匹配多个相互依赖的可选字符

php - 字符串的特殊 preg_match

ios - 正则表达式在 Swift 中获取方括号对之间的文本

java - 寻找 Java 正则表达式以匹配给定范围内的最后 2 位数字

java - 将项目 JRE 构建路径条目设置为 'JavaSE-1.7'

java - 如何使使用 IKVM com 创建的 .dll 可见?

java - 计算复活节星期天的日期

java - 如何对依赖于 Maven 本地存储库的 Java 应用程序进行 Docker 化?

java - 我们可以使用Java中的 "new"关键字创建一个HttpResponse对象吗?