我正在尝试编写一个字符串“清除”功能,该功能仅允许使用字母数字字符以及其他一些字符,例如下划线,句点和减号(破折号)。
当前,我们的函数使用源字符串的直接char迭代,但是我试图将其转换为RegEx,因为从我一直在阅读的内容来看,它更干净,性能更高(在我看来,在一次直接迭代中倒退了,但是在获得可正常运行的RegEx之前,我无法对其进行概要分析。)
对我来说,这个问题有两个方面。一,我知道以下正则表达式...
[a-zA-Z0-9]
...匹配一系列字母数字字符,但是我如何同时包括下划线,句点和减号?您是否简单地使用'\'字符将它们转义,然后将其与其他字符放在方括号之间?
其次,对于不属于匹配项的任何字符(即其他标点,如“?”),我们希望将其替换为下划线。
我的想法是改为匹配所需范围的字符,我们匹配不在所需范围内的单个字符,然后替换它。我认为正则表达式的目的是将克拉作为方括号之间的第一个字符,例如...
[^a-zA-Z0-9]
那是正确的方法吗?
可能最有效的方法是设置一个静态正则表达式来描述要替换的字符。
public static class StringCleaner
{
public static Regex invalidChars = new Regex(@"[^A-Z0-9._\-]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
public static string ReplaceInvalidChars(string input)
{
return invalidChars.Replace(input, "_");
}
}
但是,如果您不希望正则表达式替换行尾和空格(如空格和制表符),则需要使用稍有不同的表达式。
public static Regex invalidChars = new Regex(@"[^A-Z0-9._\-\s]", RegexOptions.Compiled | RegexOptions.IgnoreCase);
此外,以下是必须进行转义以匹配文字字符的规则:
在用方括号表示的集合中,您必须-#]\
在出现这些字符的任何位置进行转义,并且前提是字符^
出现在集合的第一个位置以匹配文字字符。在集合之外,您必须转义以下字符:.$^|{}[]()+?#
以匹配文字字符。
有关更多信息,请参见以下文档:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句