C#字符串替换与案例重复

时间:2015-02-15 01:01:30

标签: c# regex string replace case-sensitive

我正在开展一个有趣的项目,需要以不寻常的方式更换字符串。具体来说,结果的情况必须尝试匹配原始案例,搜索本身不区分大小写。

示例:

原文:"测试Foobar测试" 搜索:" foobar" 替换为:" helloworld" 结果:"测试Helloworld测试"

原文:"测试FOOBAR测试" 搜索:" foobar" 替换为:" helloworld" 结果:"测试HELLOWORLD测试"

现在,我意识到很多情况下很难确定(混合大小写匹配不同的长度替换。)但如果我将其限制为三种情况怎么办:全部大写,全部小写,首字母大写?

到目前为止,我的计划是进行三次搜索:首先对全部大写条件进行区分大小写搜索,然后对区分大小写条件进行区分大小写搜索,最后进行不区分大小写的搜索并使用全部小写替换。但是,如果可能的话,我想要更快,更优雅的东西。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我会使用正则表达式来执行查找,因为:

  • 正则表达式可以不区分大小写
  • 正则表达式可以返回它找到的匹配集合,您可以单独检查每个匹配
  • 你所采取的行动可能是每场比赛特有的,一个可能是骆驼案,而另一个是全部大写

一个好的解决方案可能是将操作封装为一个方法,然后迭代找到的匹配项,调用方法,用新文本替换匹配项。

如果您打算保持替换的大写简单,那么您可以只检查第一个字母字符和另一个任意字符 - 如果两者都是大写,则假设结果应该是大写,如果第一个是高位但是第二个低然后假设骆驼套管,如果两者都低,则假设全部小写。当然,如果两个字符太粗糙而不可靠,你可以增加要测试的字符数。

答案 1 :(得分:0)

我发现Regex.Replace的重载需要一个MatchEvaluator。在评估者中,我可以检查匹配字符串的大小写并从那里开始。

此外,正如slugster所说,Regex方法可以选择不区分大小写。