【问题标题】:How can I match two strings, one containing "and" the other "&" or "+"?如何匹配两个字符串,一个包含“and”,另一个包含“&”或“+”?
【发布时间】:2021-10-18 18:01:27
【问题描述】:

我正在比较两个标题列表以获得第三个列表。在这种情况下,第一个列表是一个艺术家的所有专辑列表,第二个是该艺术家在库中的专辑列表,第三个列表是库中缺少的专辑。

我的代码运行良好,可以处理缺少的标点符号和重音字符,但是当涉及可以是“ 和 ”或“ 和 ”甚至是“ + ”。

最简单的解决方案是对所有标题执行类似操作:

title = title.Replace(" + ", " and ").Replace(" & ", " and ");

所以它们都是相同的形式。注意:我正在检查由空格包围的符号,以确保我得到符号表示“和”的情况。

但是,我觉得这并不高效,尤其是对于一长串标题。

是否有更有效的文本替换方法,或者更好的是,比较原始字符串以获得有效匹配?

【问题讨论】:

标签: c# string replace comparison


【解决方案1】:

下面我的答案更好。使用字符类来解释空格“ [+&] ”。

你可以使用正则表达式:

  • () 对正则表达式进行分组
  • \\+ 将匹配 '+' 字符
  • '|'表示或
  • & 将匹配 '&' 字符
var title = Regex.Replace(title, "(\\+|&)", "and")

在此处查看实际操作:https://dotnetfiddle.net/9HY1pH

【讨论】:

  • 别忘了,被空格包围的时候需要匹配&和+。
【解决方案2】:

您可以使用单个 Regex.Replace,并使用 character class 匹配 + 或 &,例如 [+&] 前后加空格。

string title = "this & that + those";
Console.WriteLine(Regex.Replace(title, @" [+&] ", " and "));

输出

this and that and those

【讨论】:

    猜你喜欢
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2013-11-26
    • 2012-10-05
    • 2013-08-16
    相关资源
    最近更新 更多