繁体   English   中英

正则表达式拆分和忽略括号

[英]Regex to split and ignore brackets

我需要在文本中用逗号分隔,但文本在括号内还有一个逗号需要忽略

输入文本:精选花生、糖(糖、花式糖蜜) 、氢化植物油(棉籽油和菜籽油)、盐。

预期输出:

  • 精选烤花生
  • 糖(糖,花式糖蜜)
  • 氢化植物油(棉籽油和菜籽油)

我的代码

string pattern = @"\s*(?:""[^""]*""|\([^)]*\)|[^, ]+)";
string input = "Selectroasted peanuts,Sugars (sugar, fancymolasses),Hydrogenatedvegetable oil (cottonseed and rapeseed oil),Salt."; 
foreach (Match m in Regex.Matches(input, pattern)) 
{ 
Console.WriteLine("{0}", m.Value); 
}

我得到的输出:

  • 精选烤
  • 花生
  • 糖类
  • (糖,花式糖蜜)
  • 氢化蔬菜
  • (棉籽油和菜籽油)

请帮忙。

您可以使用

string pattern = @"(?:""[^""]*""|\([^()]*\)|[^,])+";
string input = "Selectroasted peanuts,Sugars (sugar, fancymolasses),Hydrogenatedvegetable oil (cottonseed and rapeseed oil),Salt."; 
foreach (Match m in Regex.Matches(input.TrimEnd(new[] {'!', '?', '.', '…'}), pattern)) 
{ 
    Console.WriteLine("{0}", m.Value); 
}
// => Selectroasted peanuts
//    Sugars (sugar, fancymolasses)
//    Hydrogenatedvegetable oil (cottonseed and rapeseed oil)
//    Salt

请参阅C# 演示 也请参阅正则表达式演示 它匹配一次或多次出现

  • "[^"]*" - "比其他零个或多个字符" ,然后"
  • | - 或者
  • \\([^()]*\\) - a ( ,然后是除()之外的任何零个或多个字符,然后是 a )字符
  • | - 或者
  • [^,] - 除 a ,之外的字符。

请注意代码片段中的.TrimEnd(new[] {'!', '?', '.', '…'})部分旨在删除结尾的句子标点符号,但如果您可以使用Salt. 在输出中,您可以删除该部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM