使用大小写重复的 C# 字符串替换
C# string replacement with case duplication
我正在从事一个有趣的项目,该项目需要以不寻常的方式替换一些字符串。具体来说,结果的大小写必须尝试匹配原始的大小写,并且搜索本身不区分大小写。
示例:
原文:"Test Foobar Test"
搜索:"foobar"
替换为:"helloworld"
结果:"Test Helloworld Test"
原文:"Test FOOBAR Test"
搜索:"foobar"
替换为:"helloworld"
结果:"Test HELLOWORLD Test"
现在,我意识到在很多情况下这很难确定(混合大小写匹配与不同的长度替换)。但是如果我将它限制在三种情况下会怎样:全部大写、全部小写和首字母大写?
到目前为止,我的计划是进行三个搜索:首先对全部大写条件进行区分大小写的搜索,然后对首字母条件进行区分大小写的搜索,最后进行不区分大小写的搜索并替换为全部小写.但如果可能的话,我想要更快更优雅的东西。有什么想法吗?
我会使用正则表达式进行查找,因为:
- 正则表达式可以不区分大小写
- 正则表达式可以 return 它找到的一组匹配项,您可以单独检查每个匹配项
- 你采取的行动可以特定于每场比赛,一个可能是驼峰式,而另一个是全大写
一个好的解决方案可能是将要采取的操作封装为方法,然后遍历找到的匹配项,调用方法,用新文本替换匹配项。
如果您打算保持替换的大写简单,那么您可以只检查第一个字母字符和另一个任意字符 - 如果两者都是大写,则假设结果应该是大写,如果第一个是大写但第二个小然后假设骆驼大小写,如果两者都小则假设所有小写。当然你可以增加字符数来测试两个是否太粗糙而不可靠。
我发现 Regex.Replace 的重载需要 MatchEvaluator。在求值器中,我可以检查匹配字符串的大小写并从那里开始。
此外,正如 slugster 所说,Regex 方法有一个不区分大小写的选项。
我正在从事一个有趣的项目,该项目需要以不寻常的方式替换一些字符串。具体来说,结果的大小写必须尝试匹配原始的大小写,并且搜索本身不区分大小写。
示例:
原文:"Test Foobar Test" 搜索:"foobar" 替换为:"helloworld" 结果:"Test Helloworld Test"
原文:"Test FOOBAR Test" 搜索:"foobar" 替换为:"helloworld" 结果:"Test HELLOWORLD Test"
现在,我意识到在很多情况下这很难确定(混合大小写匹配与不同的长度替换)。但是如果我将它限制在三种情况下会怎样:全部大写、全部小写和首字母大写?
到目前为止,我的计划是进行三个搜索:首先对全部大写条件进行区分大小写的搜索,然后对首字母条件进行区分大小写的搜索,最后进行不区分大小写的搜索并替换为全部小写.但如果可能的话,我想要更快更优雅的东西。有什么想法吗?
我会使用正则表达式进行查找,因为:
- 正则表达式可以不区分大小写
- 正则表达式可以 return 它找到的一组匹配项,您可以单独检查每个匹配项
- 你采取的行动可以特定于每场比赛,一个可能是驼峰式,而另一个是全大写
一个好的解决方案可能是将要采取的操作封装为方法,然后遍历找到的匹配项,调用方法,用新文本替换匹配项。
如果您打算保持替换的大写简单,那么您可以只检查第一个字母字符和另一个任意字符 - 如果两者都是大写,则假设结果应该是大写,如果第一个是大写但第二个小然后假设骆驼大小写,如果两者都小则假设所有小写。当然你可以增加字符数来测试两个是否太粗糙而不可靠。
我发现 Regex.Replace 的重载需要 MatchEvaluator。在求值器中,我可以检查匹配字符串的大小写并从那里开始。
此外,正如 slugster 所说,Regex 方法有一个不区分大小写的选项。