首页 > 解决方案 > 逗号分开,除非逗号在两个数字之间

问题描述

考虑以下字符串。

String s = "va1, var2, aVar,var4, my_var55 DECIMAL(20,4)"

我之前只是.split(",")为了获取变量令牌而没有考虑DECIMAL(20,4). 正则表达式应该有点像这样,如果逗号出现在两个数字之间,那么它不应该拆分。使用什么正则表达式,split()以便我可以得到以下结果:

["var1", "var2", "aVar", "var4", "my_var55 DECIMAL(20,4)"]

PS 请注意,变量可以以数字结尾,但不能以数字开头。

标签: javaregex

解决方案


你可以使用

(?<=\S),(?!\h*\d)\h*
  • (?<=\S)在逗号前声明一个非空白字符
  • (?!\h*\d) 断言没有可选的水平空白字符后跟一个数字
  • \h*匹配 0+ 个水平空白字符

正则表达式演示| Java 演示

String s = "va1, var2, aVar,var4, my_var55 DECIMAL(20,4)";
for (String element : s.split("(?<=\\S),(?!\\h*\\d)\\h*"))
    System.out.println(element);

输出

va1
var2
aVar
var4
my_var55 DECIMAL(20,4)

为了不在字符串末尾的逗号上拆分,您还可以断言逗号后跟一个单词 char 除了数字

(?<=\S),(?=\h*\b[^\W\d])

正则表达式演示


推荐阅读