c# - 正则表达式分割并忽略括号

标签 c# regex

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

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

预期输出:

  • 电烤花生
  • 糖(糖、花式糖蜜)
  • 氢化植物油(棉籽油和菜籽油)

我的代码

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# demo 。请参阅regex demo , 也。它匹配一次或多次出现

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

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

关于c# - 正则表达式分割并忽略括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68362466/

相关文章:

c# - 如何使用 C# 以编程方式复制 MS SQL 2000 数据库?

c# - 外部 css 与服务器端样式添加

java - 是否有 CheckStyle 规则强制 if else 关键字在 if/else 阶梯中位于同一行?

Python 正则表达式何时失败?参与重复组

regex - 正则表达式 while 循环内的代码块正在工作,但在手动终止之前不会显示结果

c# - 使用 Microsoft Moles 模拟一个简单的类

c# - 从另外两个创建动态表达式 lambda(链接表达式)

C# - 如何删除临时 Internet 文件

javascript - 正则表达式在 streetNumber 上验证时出现问题

正则表达式 可选组反向引用