我需要一个带有非字母数字字符的字符串,以及从中删除的字符串;我使用了以下内容:
wordsstr = Regex.Replace(wordsstr, "[^A-Za-z0-9,-_]", "");
问题是点(。)s留在字符串中但尚未指定保留它们。我怎么能确保点也被摆脱?
非常感谢。
答案 0 :(得分:8)
指定需要保留它们 - 您正在使用,-_
,这是从U + 002C到U + 005F的所有内容,包括U + 002E(句点)。< / p>
如果您的意思是,-_
到只是意味着逗号,破折号和下划线,则您需要转义短划线,例如:
wordsstr = Regex.Replace(input, @"[^A-Za-z0-9,\-_]", "");
或者,(如在Oded的评论中)将短划线作为集合中的第一个或最后一个字符,以防止它被解释为范围说明符:
wordsstr = Regex.Replace(input, "[^A-Za-z0-9,_-]", "");
如果这不是目标,请更具体:“非字母数字字符等”并不足以让您继续使用。
答案 1 :(得分:1)
尝试以下代码:
wordsstr = Regex.Replace(wordsstr, "[^-A-Za-z0-9,_]", "");
如果你写下你的期望和实际结果,你的问题会更容易理解。
答案 2 :(得分:1)
尝试
wordstr = Regex.Replace(wordstr, "[^A-Za-z0-9,\\-_]", "");
或更好,如果你只想要字母数字字符:
wordstr = Regex.Replace(wordstr, "[^A-z0-9]", "");
你的第一个正则表达式中的问题是-
char定义了一个范围,因此你必须将其转义以使其按照你想要的方式运行。