我们需要一个C#函数,用于从字符串中删除所有特殊字符。
此外,是否可以将"George's"更改为"George"(删除单引号和字符s)?
这个方法将删除除字母、数字和空格之外的一切内容。它还会删除任何跟在字符 s 后面的 ' 或 "。
public static string RemoveSpecialCharacters(string input)
{
Regex r = new Regex("(?:[^a-z0-9 ]|(?<=['\"])s)", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled);
return r.Replace(input, String.Empty);
}
public static string RemoveSpecialCharacters(string input)
{
Regex r = new Regex(
"(?:[^a-zA-Z0-9 ]|(?<=['\"])s)",
RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled);
return r.Replace(input, String.Empty);
}
Ryan的回答是正确的。只需添加A-Z
,因为许多人都需要它。
如果我们知道什么是特殊字符会更有帮助。不过这里有一个函数可以解决问题。
public bool IsSpecialChar(char c) {
// Need you to fill this out
}
public string RemoveSpecialChars(string s) {
var builder = new System.Text.StringBuilder();
foreach (var cur in s) {
if (!IsSpecialChar(cur)) {
builder.Append(cur);
}
}
return builder.ToString();
}
最好定义一个你想保留的字符列表,而不是枚举所有你不想要的字符。例如,使用perl正则表达式s/[^A-Za-z0-9]+//g
将删除任何非单词字符(抱歉,我不熟悉c#正则表达式:D)。
对于你的另一个问题,如果你关心某些情况(比如只在它前面有一个单词时才删除's
),你可以根据前一个单词定义要删除的内容,否则就删除所有出现的's
。
s/\W+//g
(tr///
不支持正则表达式,而“单词字符”的集合包括远不止[A-Za-z0-9]
)。C#版本应该是Regex.Replace(input, @"\W+", String.Empty)
。 - Alan Moore