我有一个基于,
字符标记的字符串。这里的问题是字符串是这样的
-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。
答案 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(令牌);
答案 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);
这将找到带有前导空格(一个或多个)的任何逗号。