我想用没有括号或方括号的逗号分隔字符串。
我正在处理以下字符串
土豆、植物油(向日葵、玉米和/或菜籽油)、蜂蜜烧烤调味品糖、盐、甜味剂、Torula酵母、洋葱粉、香料、麦芽糊精果糖、酵母膏、糖蜜、天然风味,包括牛奶、玉米淀粉、蜂蜜、阿拉伯胶、辣椒提取物、焦糖色素、大蒜粉、柠檬酸和向日葵油
我希望它如何分裂(+表示我希望分裂发生的地方)
Potatoes+植物油(向日葵、玉米和/或菜籽油)+蜂蜜烧烤调味品糖、盐、甜味剂、Torula酵母、洋葱粉、Spices+ Malto糊精Fructose+酵母Extract+ Molasses+天然风味,包括Milk+ Starch+ Honey+ Gum Arabic+ Honey+Arabic+ Caramel Color+ Powder+ Citric Acid+和向日葵油
我最需要做的就是
,(?![^\[\(]*[$\]\)])发布于 2018-02-28 01:36:32
也许你想要这样的东西:
(?!<(?:\(|\[)[^)\]]+),(?![^(\[]+(?:\)|\]))当输入输入到Java时(请注意,附加的]和(在任意位置插入,以使其格式良好):
土豆、植物油(向日葵、玉米和/或菜籽油)、蜂蜜烧烤调味品糖、盐、德克司、Torula酵母、洋葱粉、香料、麦芽糊精果糖、酵母膏、糖蜜、天然风味,包括牛奶、玉米淀粉、蜂蜜、阿拉伯胶、辣椒提取物、焦糖色素(大蒜粉、柠檬酸和向日葵油)。
它产生的输出:
Potatoes
Vegetable Oil (Sunflower, Corn, And/or Canola Oil)
Honey BBQ Seasoning [Sugar, Salt, Dextrose, Torula Yeast]
Onion Powder
Spices
Maltodextrin Fructose
Yeast Extract
Molasses
Natural Flavor [Including Milk]
Corn Starch
Honey
Gum Arabic
Paprika Extracts
Caramel Color (Garlic Powder, Citric Acid, And Sunflower Oil).这正是“高层逗号的分裂”。
但是,请注意,这个正则表达式实际上是低效的。用正则表达式来计算括号不是一个好主意。它似乎可以用一个简单的扫描解决-左后简单分割。
发布于 2018-02-28 03:18:54
有时,你最好去寻找你想要的东西(例如,白名单),而不是试图在你想要的东西之间找出分裂点(即黑名单):
String haystack = "Potatoes, Vegetable Oil (Sunflower, Corn, And/or Canola Oil), "
+ "Honey BBQ Seasoning [Sugar, Salt, Dextrose, Torula Yeast], Onion Powder, "
+ "Spices, Maltodextrin Fructose, Yeast Extract, Molasses, "
+ "Natural Flavor [Including Milk], Corn Starch, Honey, Gum Arabic, "
+ "Paprika Extracts, Caramel Color (Garlic Powder, Citric Acid, And Sunflower Oil).";
Matcher m = Pattern.compile("\\w[^\\[(,]*(\\[[^]]*\\]|\\([^)]*\\))?")
.matcher(haystack);
while (m.find()) {
System.out.println("'" + m.group() + "'");
}输出:
'Potatoes'
'Vegetable Oil (Sunflower, Corn, And/or Canola Oil)'
'Honey BBQ Seasoning [Sugar, Salt, Dextrose, Torula Yeast]'
'Onion Powder'
'Spices'
'Maltodextrin Fructose'
'Yeast Extract'
'Molasses'
'Natural Flavor [Including Milk]'
'Corn Starch'
'Honey'
'Gum Arabic'
'Paprika Extracts'
'Caramel Color (Garlic Powder, Citric Acid, And Sunflower Oil)'注意,结果字符串不包括任何前导或尾随空格。
Regex解释:
"\w[^\[(,]*(\[[^]]+\]|\([^)]*\))?" -后反斜杠转义处理。
"\w " -找一封信.
" [^\[(,]* " - ...后面跟着除了[ (或,之外的任何东西
" ( | )?" - ...可选的后跟:
" \[ \] " -.括号里的东西
" [^]]* " -.除了]以外的任何东西
" \( \) " -.或括号中的某物
" [^)]* " -.除了)以外的任何东西
https://stackoverflow.com/questions/49020531
复制相似问题