如何在括号内的括号中获取带有Java正则表达式的String

时间:2017-01-06 00:22:19

标签: java regex

如何在括号内获取String。请参阅下面的代码。

dropzone

我需要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);

2 个答案:

答案 0 :(得分:2)

我在您的代码中看到了两个问题:

  1. 好像你只打印第一场比赛而不是 循环结果。使用System.in进行迭代 通过比赛清单。
  2. 将您的模式简化为while(mat.find()),以获得\\w+(<[^>]+>+)?C1<C2, C3<T1>>C4<T2>

    RegEx模式解释:

    • C5 = 1个或更多字母数字或下划线字符
    • w+ =括号中的0或1
    • ()? =匹配<字符
    • < = 1个或多个字符设置字符,直到[^>]+字符
    • > = 1个或多个>+字符(如果您只想强制执行一个或两个>字符,则替代方法为>{1,2}。)
  3. 您生成的代码应如下所示:

    >

    如果您只想要一个部件列表,更简单的方法是使用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()); } } 而不是RegEx。您可以在split()上拆分字符串,将数据保存在数组中,然后根据需要迭代数组。

    这将通过以下方式实现:

    .

答案 1 :(得分:1)

只是分开点:

String[] parts = str.split("\\.");

这可以使用问题中的示例输入执行您想要的操作。