正则表达式拆分和忽略括号
Posted
技术标签:
【中文标题】正则表达式拆分和忽略括号【英文标题】:Regex to split and ignore brackets 【发布时间】:2021-09-22 12:16:24 【问题描述】:我需要在文本中用逗号分隔,但文本在括号内也有一个逗号,需要忽略
输入文本:Selectroasted 花生、糖(糖、花式糖浆)、氢化植物油(棉籽和菜籽油)、盐。
预期输出:
电烤花生 糖(糖、花式糖浆) 氢化植物油(棉籽油和菜籽油) 盐我的代码
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);
我得到的输出:
电烤 花生 糖 (糖,花式糖浆) 氢化蔬菜 油 (棉籽油和菜籽油) 盐请帮忙。
【问题讨论】:
最后的.
在Salt
之后会发生什么?如果在输出中得到Salt.
可以吗?
是的,即使我得到了 Salt,我也能应付得来。在输出中
【参考方案1】:
你可以使用
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。它匹配一个或多个出现的
"[^"]*"
- "
,除"
之外的零个或多个字符,然后是"
|
- 或
\([^()]*\)
- 一个(
,然后是除(
和)
之外的任何零个或多个字符,然后是)
字符
|
- 或
[^,]
- ,
以外的字符。
请注意,代码 sn-p 中的 .TrimEnd(new[] '!', '?', '.', '…')
部分旨在删除结尾的句子标点符号,但如果您可以在输出中提供 Salt.
,则可以删除该部分。
【讨论】:
谢谢,工作就像一个魅力。我花了 4 个小时,得到了所有类型的输出,除了我想要的。干杯! 我早些时候尝试过投票,但由于我的声誉低于 15,它给出了错误,现在我只是投票给了答案,再次感谢。以上是关于正则表达式拆分和忽略括号的主要内容,如果未能解决你的问题,请参考以下文章