代码之家  ›  专栏  ›  技术社区  ›  Danation

C#字符串替换,带大小写复制

  •  -3
  • Danation  · 技术社区  · 11 年前

    我正在做一个有趣的项目,需要以不同寻常的方式替换字符串。具体来说,结果的大小写必须与原始大小写匹配,并且搜索本身不区分大小写。

    示例:

    原文:“测试Foobar测试” 搜索:“foobar” 替换为:“helloworld” 结果:“测试地狱世界测试”

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

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

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

    2 回复  |  直到 11 年前
        1
  •  1
  •   slugster Joey Cai    11 年前

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

    • 正则表达式可以不区分大小写
    • 正则表达式可以返回找到的匹配项集合,您可以单独检查每个匹配项
    • 您所采取的操作可以针对每个匹配,一个可能是驼色大小写,而另一个则是全大写

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

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

        2
  •  0
  •   Danation    11 年前

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

    此外,正如slugster所说,Regex方法具有不区分大小写的选项。