正则表达式删除特殊字符

Posted

技术标签:

【中文标题】正则表达式删除特殊字符【英文标题】:Regex to remove special character 【发布时间】:2016-05-26 15:36:36 【问题描述】:

我创建了一个正则表达式,它删除了像 ('&) 这样的特殊字符,并使每个单词的首字母大写,并在两个单词之间填充下划线 (_)。例如, 输入:"V_DV3501_Value can't be empty" 输出:"V_DV3501_Value_Cant_Be_Empty"

我创建的正则表达式产生的输出为,

输出:"V_DV3501_Value_Can't_Be_Empty"

问题是撇号(')字符不会从字符串中替换。如果你能在解决这个问题的代码中提出任何其他模式,我可以。

class Program

    static void Main(string[] args)
    
        string createString = "";
        string input = "";

        var pattern = @"(?:[^a-zA-Z_]*)((?<output>[a-zA-Z0-9_]*)[\s+&<>\',\/=-]*|$)*";

        var subject = "V_DV3501_Value can't be empty";

        subject = subject.ToString().Replace("&", "and");

        var regex = new Regex(pattern);

        var match = regex.Match(subject);
        Console.WriteLine("pattern: 0 1 Length: 2", pattern, match.Success, match.Length);

        foreach (Capture capture in match.Groups["output"].Captures)
        
            Console.WriteLine("    0 @ 1 length 2", capture.Value, capture.Index, capture.Length);

            input = capture.Value + "_";

            if (!String.IsNullOrEmpty(input))
            
                input = input.First().ToString().ToUpper() + input.Substring(1);
            

            createString = createString + input;

        

        createString = createString.Remove(createString.Length - 2);
        Console.WriteLine("Final: " + createString);
    

谢谢

【问题讨论】:

Regex to remove apostrophe的可能重复 请检查this is working as expected. @WiktorStribiżew 非常感谢您的快速回复。 太好了,我能帮上忙。这绝对不是Regex to remove apostrophe 的重复。我发布了带有解释的答案,如果对您有用,请考虑接受。 【参考方案1】:

您可以使用以下解决方案:

var str = "V_DV3501_Value can't be empty";
var res = Regex.Replace(str, @"[\W-[']](\pL)|'", m =>
      m.Groups[1].Success ? string.Format("_0", m.Groups[1].Value.ToUpper()) : "");
Console.WriteLine(res);
// => V_DV3501_Value_Cant_Be_Empty

见IDEONE demo

这里的想法是使用[\W-[']](\pL)|' 正则表达式匹配除' 之外的任何非单词字符(使用[\W-[']],稍后替换为_)后跟一个字母(使用(\pL) ) 并捕获该字母,以便稍后我们可以检查该组是否参加了比赛(如果是,则将其转为大写),或者仅匹配 ' 以将其替换为空。

【讨论】:

以上是关于正则表达式删除特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式从字符串中删除所有特殊字符?

无法在正则表达式和 nltk 的帮助下删除特殊字符

Javascript - 正则表达式从标题中删除特殊字符

使用php和正则表达式从字符串中删除数字和特殊字符[重复]

Python 正则表达式 - 删除所有“。”和特殊字符,小数点除外

PHP PHP正则表达式 - 从字符串中删除特殊字符