基于逗号对字符串进行标记 - 正则表达式

时间:2012-09-05 13:15:28

标签: java regex

我有一个基于,字符标记的字符串。这里的问题是字符串是这样的

-123 abc, 234 def (2,3,4), -456 zyx (4,5,6) and xyz (6,5,4), 789 final!

标记输出后应该看起来像......

-123 abc
234 def (2,3,4)
-456 zyx (4,5,6) and xyz (6,5,4)
789 final!

如何为此编写正则表达式? TIA。

4 个答案:

答案 0 :(得分:5)

Tokenizer不会这样做,你需要一个解析器。 Regexp在计数方面并不是特别擅长,这就是你需要决定在哪里结束带有逗号的括号内的块。

简单的Recursive Descent Parser应该适用于您的情况。你可能想要看中并尝试ANTLR。它是一个强大而强大的工具,但它可能对于简单表达(例如示例中的表达)来说太过分了。

答案 1 :(得分:0)

您可以通过“,”来尝试模式匹配,但不能使用数字:

Pattern pattern = Pattern.compile("^[\\d][,]^[\\d]");
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
    //Here you know where you have the separating ,
    start = matcher.start();

或者怎么用“,”标记?希望在你想要标记之后总有一个空格。

String test = "-123 abc, 234 def (2,3,4), -456 zyx (4,5,6) and xyz (6,5,4), 789 final!";
String[] tokens = test.split(", ");
System.out.println(Arrays.toString(tokens));

答案 2 :(得分:0)

它可能就像这样:

  

var string =“ - 123 abc,234 def(2,3,4), - 456 zyx(4,5,6)和xyz   (6,5,4),789决赛!“;

     

var tokens = string.split(',');   的console.log(令牌);

演示:http://jsfiddle.net/HQgV8/

答案 3 :(得分:0)

另一种方法是使用

Pattern p = Pattern.compile(", +");
for(String my : p.split("-123 abc,      234 def (2,3,4),  -456 zyx (4,5,6) and xyz (6,5,4), 789 final!"))
System.out.println(my);

这将找到带有前导空格(一个或多个)的任何逗号。