Что я здесь делаю неправильно?
string q = "john s!";
string clean = Regex.Replace(q, @"([^a-zA-Z0-9]|^\s)", string.Empty);
// clean == "johns". I want "john s";
Что я здесь делаю неправильно?
string q = "john s!";
string clean = Regex.Replace(q, @"([^a-zA-Z0-9]|^\s)", string.Empty);
// clean == "johns". I want "john s";
просто FYI
string clean = Regex.Replace(q, @"[^a-zA-Z0-9\s]", string.Empty);
будет лучше, чем
string clean = Regex.Replace(q, @"[^\w\s]", string.Empty);
Это:
string clean = Regex.Replace(dirty, "[^a-zA-Z0-9\x20]", String.Empty);
\x20 является символом ascii hex для символа 'space'
вы можете добавить больше отдельных символов, которые вы хотите разрешить. Если вы хотите, чтобы, например, "?" , в строке возврата добавьте \x3f.
Я понял:
string clean = Regex.Replace(q, @"[^a-zA-Z0-9\s]", string.Empty);
Не знал, что вы можете положить \s в скобки
Я подозреваю, что ^ не работает так, как вы думаете, что делает это за пределами класса символов.
То, что вы говорите, это заменить все, что не является буквенно-цифровым с пустой строкой, или любым ведущим пространством. Я думаю, что вы хотите сказать, что пробелы в порядке, чтобы их не заменить - попробуйте переместить \s в класс [].
Следующее регулярное выражение для включения пространства в текстовое поле.
Regex r = new Regex("^[a-zA-Z\\s]+");
r.IsMatch(textbox1.text);
Это отлично работает для меня.
Кажется, есть две проблемы.
Я думаю, вам нужно следующее regex @ "([^ a-zA-Z0-9\s]) +"
Огибающий внутри квадратных скобок означает все символы, кроме следующего диапазона. Вы хотите, чтобы за пределами квадратных скобок был огибающий.