考虑找到一对匹配的字符集的要求,并删除它们之间的任何字符,以及那些字符/分隔符。
这里是分隔符集:
[] square brackets
() parentheses
"" double quotes
'' single quotes
下面是一些应该匹配的字符串示例:
Given: Results In:
-------------------------------------------
Hello "some" World Hello World
Give [Me Some] Purple Give Purple
Have Fifteen (Lunch Today) Have Fifteen
Have 'a good'day Have day
以及一些不应匹配的字符串示例:
Does Not Match:
------------------
Hello "world
Brown]co[w
Cheese'factory
如果给定的字符串不包含匹配的定界符集,则不会修改它。输入字符串可能有许多匹配的定界符对。如果一组 2 个分隔符重叠(即 he[llo "worl]d"
),那将是我们可以在这里忽略的边缘情况。
算法看起来像这样:
string myInput = "Give [Me Some] Purple (And More) Elephants";
string pattern; //some pattern
string output = Regex.Replace(myInput, pattern, string.Empty);
问题:您将如何使用 C# 实现这一目标?我倾向于正则表达式。
奖励:是否有简单的方法来匹配常量或某种列表中的开始和结束定界符?我正在寻找的解决方案很容易更改分隔符,以防业务分析师提出新的分隔符集。
最佳答案
简单的正则表达式是:
string input = "Give [Me Some] Purple (And More) Elephants";
string regex = "(\\[.*\\])|(\".*\")|('.*')|(\\(.*\\))";
string output = Regex.Replace(input, regex, "");
至于以自定义方式构建正则表达式,您只需要构建部件:
('.*') // example of the single quote check
然后将每个单独的正则表达式部分与 OR(正则表达式中的 |)连接起来,就像我原来的例子一样。构建正则表达式字符串后,只需运行一次即可。关键是让正则表达式进行一次检查,因为对一个项目执行多个正则表达式匹配,然后遍历大量项目可能会导致性能显着下降。
在我的第一个示例中,它将取代以下行:
string input = "Give [Me Some] Purple (And More) Elephants";
string regex = "Your built up regex here";
string sOutput = Regex.Replace(input, regex, "");
我相信有人会发布一个很酷的 linq 表达式,以基于要匹配的分隔符对象数组或其他内容构建正则表达式。
关于c# - 删除字符串中分隔符之间的文本(使用正则表达式?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1359412/