【问题标题】:how to remove special character from string?如何从字符串中删除特殊字符?
【发布时间】:2021-07-12 08:41:59
【问题描述】:

我目前的情况是,我有一个像“XYZName”这样的字符串,但它应该只需要前 3 个字符,并且在这 3 个字符中不应该有任何特殊字符。

示例:“XYZ 名称” 结果应该是:XYZ

另一个要求是 示例:“X.YZName”或“XY-ZName” 结果应该是:XYZ

第一个示例已完成,但无法实现第二个示例。 我的代码是

 comName = (comName .Replace(".", string.Empty).Length >= 3
                    ? comName .Replace(" ", string.Empty).Substring(0, 3)
                    : comName .Replace(" ", string.Empty)).ToUpper();

如何做到这一点?提前致谢

【问题讨论】:

  • 你认为什么是特殊字符?或者更好的是,你的“安全”字符集是什么?
  • 我想要前 3 个字符不带“.”、“-”、“@”等
  • 所以只有字母 A-Z 可以接受?没有数字?
  • 号码也可以
  • 所以只有 A-Z 和数字?您必须对此准确无误,否则我们可能会为您提供包含您不想要的字符或排除您想要的字符的解决方案。

标签: c# regex string special-characters


【解决方案1】:

您可以确保首先将字符 A-Z 与 A-Z 以外的可选字符或中间的空白字符匹配 3 次:

^[A-Z][^\sA-Z]*[A-Z][^\sA-Z]*[A-Z]

查看regex demo 了解比赛。

然后从这些匹配项中删除除 A-Z 之外的所有字符:

var regex = new Regex(@"^[A-Z][^\sA-Z]*[A-Z][^\sA-Z]*[A-Z]");
string[] strings = {"XYZName", "X.YZName", "XY-ZName"};

foreach (String s in strings)
{
    var m = regex.Match(s);
    if (m.Success) {
        Console.WriteLine(Regex.Replace(m.Value, @"[^A-Z]+", ""));
    }
}

输出

XYZ
XYZ
XYZ

查看C# demo


或者你可以使用3个捕获组并直接打印组的值。

^([A-Z])[^\sA-Z]*([A-Z])[^\sA-Z]*([A-Z])

C# demo | Regex demo

【讨论】:

    【解决方案2】:

    评论后更新也允许使用数字

    comName = Regex.Replace(comName, @"[^a-zA-Z\d]", "").Substring(0, 3);
    

    正则表达式使用否定集,因此除a-zA-Z 或数字 (\d) 之外的任何字符都将被删除。

    删除字符后,Substring 取前 3 个。


    如果您使用的是 C#8+,则可以将 Substring 替换为 Range:

    comName = Regex.Replace(comName, @"[^a-zA-Z\d]", "")[..3];
    

    【讨论】:

      猜你喜欢
      • 2011-04-11
      • 2016-01-23
      • 1970-01-01
      • 2019-11-09
      • 2011-08-29
      相关资源
      最近更新 更多