我需要在文本中用逗号分隔,但文本括号内也有一个逗号,需要忽略
输入文字:选择烤花生、糖(糖、花式糖蜜)、氢化植物油(棉籽油和菜籽油)、盐。
预期输出:
- 电烤花生
- 糖(糖、花式糖蜜)
- 氢化植物油(棉籽油和菜籽油)
- 盐
我的代码
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/