首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只匹配逗号,而不是括号或方括号中的逗号

只匹配逗号,而不是括号或方括号中的逗号
EN

Stack Overflow用户
提问于 2018-02-28 01:16:34
回答 2查看 1.1K关注 0票数 2

我想用没有括号或方括号的逗号分隔字符串。

我正在处理以下字符串

土豆、植物油(向日葵、玉米和/或菜籽油)、蜂蜜烧烤调味品糖、盐、甜味剂、Torula酵母、洋葱粉、香料、麦芽糊精果糖、酵母膏、糖蜜、天然风味,包括牛奶、玉米淀粉、蜂蜜、阿拉伯胶、辣椒提取物、焦糖色素、大蒜粉、柠檬酸和向日葵油

我希望它如何分裂(+表示我希望分裂发生的地方)

Potatoes+植物油(向日葵、玉米和/或菜籽油)+蜂蜜烧烤调味品糖、盐、甜味剂、Torula酵母、洋葱粉、Spices+ Malto糊精Fructose+酵母Extract+ Molasses+天然风味,包括Milk+ Starch+ Honey+ Gum Arabic+ Honey+Arabic+ Caramel Color+ Powder+ Citric Acid+和向日葵油

我最需要做的就是

代码语言:javascript
复制
,(?![^\[\(]*[$\]\)])

https://regex101.com/r/SVSrV2/1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-28 01:36:32

也许你想要这样的东西:

代码语言:javascript
复制
(?!<(?:\(|\[)[^)\]]+),(?![^(\[]+(?:\)|\]))

演示

当输入输入到Java时(请注意,附加的](在任意位置插入,以使其格式良好):

土豆、植物油(向日葵、玉米和/或菜籽油)、蜂蜜烧烤调味品糖、盐、德克司、Torula酵母、洋葱粉、香料、麦芽糊精果糖、酵母膏、糖蜜、天然风味,包括牛奶、玉米淀粉、蜂蜜、阿拉伯胶、辣椒提取物、焦糖色素(大蒜粉、柠檬酸和向日葵油)。

它产生的输出:

代码语言:javascript
复制
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).

这正是“高层逗号的分裂”。

但是,请注意,这个正则表达式实际上是低效的。用正则表达式来计算括号不是一个好主意。它似乎可以用一个简单的扫描解决-左后简单分割。

票数 3
EN

Stack Overflow用户

发布于 2018-02-28 03:18:54

有时,你最好去寻找你想要的东西(例如,白名单),而不是试图在你想要的东西之间找出分裂点(即黑名单):

代码语言:javascript
复制
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() + "'");
}

输出:

代码语言:javascript
复制
'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 " -找一封信.

" [^\[(,]* " - ...后面跟着除了[ (,之外的任何东西

" ( | )?" - ...可选的后跟:

" \[ \] " -.括号里的东西

" [^]]* " -.除了]以外的任何东西

" \( \) " -.或括号中的某物

" [^)]* " -.除了)以外的任何东西

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49020531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档