С# Удалить специальные символы
Я хочу удалить все специальные символы из строки. Допустимые символы: A-Z (верхний или нижний регистр), цифры (0-9), подчеркивание (_), пробел(), pecentage (%) или знак точки (.).
Я пробовал это:
StringBuilder sb = new StringBuilder();
foreach (char c in input)
{
if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') | c == '.' || c == '_' || c == ' ' || c == '%')
{ sb.Append(c); }
}
return sb.ToString();
И это:
Regex r = new Regex("(?:[^a-z0-9% ]|(?<=['\"])s)", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled);
return r.Replace(input, String.Empty);
Но ничего не работает. Любая помощь будет оценена.
Спасибо!
Ответы
Ответ 1
Вы можете упростить первый метод
StringBuilder sb = new StringBuilder();
foreach (char c in input)
{
if (Char.IsLetterOrDigit(c) || c == '.' || c == '_' || c == ' ' || c == '%')
{ sb.Append(c); }
}
return sb.ToString();
который, кажется, проходит простые тесты. Вы можете сократить его, используя LINQ
return new string(
input.Where(
c => Char.IsLetterOrDigit(c) ||
c == '.' || c == '_' || c == ' ' || c == '%')
.ToArray());
Ответ 2
Regex.Replace(input, "[^a-zA-Z0-9% ._]", string.Empty)
Ответ 3
Первый подход кажется правильным, за исключением того, что у вас есть |
(побитовое ИЛИ) вместо ||
до c == '.'
.
Кстати, вы должны указать, что не работает (не компилирует ли он или не сбой или не производит неправильный вывод?)
Ответ 4
StringBuilder sb = new StringBuilder();
foreach (char c in input)
{
if (char.IsLetterOrDigit(c) || "_ %.".Contains(c.ToString()))
sb.Append(c);
}
return sb.ToString();
Ответ 5
Вот как выглядит моя версия.
StringBuilder sb = new StringBuilder();
foreach (char c in input)
{
if (Char.IsLetterOrDigit(c) ||
c == '.' || c == '_' || c == ' ' || c == '%')
sb.Append(c);
}
}
return sb.ToString();
Ответ 6
Переместите каждый char в int, а затем сравните его ascii-код с таблицей ascii, которую вы можете найти по всему Интернету: http://www.asciitable.com/
{
char[] input = txtInput.Text.ToCharArray();
StringBuilder sbResult = new StringBuilder();
foreach (char c in input)
{
int asciiCode = (int)c;
if (
//Space
asciiCode == 32
||
// Period (.)
asciiCode == 46
||
// Percentage Sign (%)
asciiCode == 37
||
// Underscore
asciiCode == 95
||
( //0-9,
asciiCode >= 48
&& asciiCode <= 57
)
||
( //A-Z
asciiCode >= 65
&& asciiCode <= 90
)
||
( //a-z
asciiCode >= 97
&& asciiCode <= 122
)
)
{
sbResult.Append(c);
}
}
txtResult.Text = sbResult.ToString();
}
Ответ 7
private string RemoveReservedCharacters(string strValue)
{
char[] ReservedChars = {'/', ':','*','?','"', '<', '>', '|'};
foreach (char strChar in ReservedChars)
{
strValue = strValue.Replace(strChar.ToString(), "");
}
return strValue;
}