c# - 删除字符串中分隔符之间的文本(使用正则表达式?)

标签 c# .net regex algorithm string

考虑找到一对匹配的字符集的要求,并删除它们之间的任何字符,以及那些字符/分隔符。

这里是分隔符集:

 []    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/

相关文章:

c# - 在 header 中拆分 Cookie

c# - 为什么每个 [TestMethod] 都会多次调用 [TestClass] 的构造函数?

c# - 带有可选文本的控制台应用程序

.net - WPF 进度条无法正确左对齐

c# - HTTP 处理程序问题

javascript - 带空格的姓氏、名字的正则表达式

c# - 在 C 中使用 C# dll - 主机 CLR 或注册 COM 互操作,Visual Studio 2010

javascript - 在 javascript 中使用 PHP 生成 JSON : issues with backslashes

python - 使用正则表达式获取拆分版本号的最佳方法

c# - 如何解决此 Azure 事件网格订阅错误?