Regex Удалите ненужные символы с определенными правилами c #

0
задан Michał Turczyn 19 March 2019 в 16:21
поделиться

3 ответа

Вы можете попробовать этот шаблон: (?=^[a-zA-Z0-9-_]{3,16}$).+

Обычно положительные прогнозные оценки (?=...) используются, чтобы утверждать, что некоторые правила действительны, как вы хотите. Объяснение:

^ - соответствует началу строки

[a-zA-Z0-9-_]{3,16} - соответствует не менее 3 и 16 не более символов в классе символов: a-zA-Z - все буквы, [ 115] - цифры, -_ - дефис или подчеркивание

$ - конец строки

И если это утверждение успешно, то сопоставьте все с .*

[ 1116] Демонстрация

0
ответ дан Michał Turczyn 19 March 2019 в 16:21
поделиться

Вам на самом деле не нужно регулярное выражение, чтобы решить это. Используйте старые добрые string.Split() и имена процессов

var input = "Jeff, john45, ab, cd, peter-ivanov, @smith, sh, too_long_username, !lleg@l ch@rs, jeffbutt";
var listOfNames = input.Split(new[] {",", " "}, StringSplitOptions.RemoveEmptyEntries)
    .Where(l => l.Length >= 3 && l.Length <= 18) // filter by length
    .Where(l => l.All(c => char.IsDigit(c) || char.IsLetter(c) || c == '-')) // filter by spec chars
    .ToList();

, теперь у вас есть список из четырех имен. Если вы хотите превратить его обратно в строку, просто объедините ваши имена:

var singleLine = string.Join(", ", listOfNames);
// singleLine is "Jeff, john45, peter-ivanov, jeffbutt"
0
ответ дан Aleks Andreev 19 March 2019 в 16:21
поделиться

Ваше собственное регулярное выражение \b([a-zA-Z0-9_-]){3,16}\b достаточно хорошо, чтобы дать намеченное совпадение, но \b не сможет выполнить свою работу и позволит частично сопоставить слово, подобное @smith, чтобы дать вам smith, потому что @ не часть символа слова и, следовательно, s в smith будет совпадать, поскольку точка между @ и s действительно является границей слова. Вам понадобится другое регулярное выражение, обеспечивающее, чтобы перед словом / следовал пробел, а также запятая, а за некоторыми словами следуют запятые, и вы хотите их подсчитать. Попробуйте использовать это регулярное выражение,

(?<= |^)[a-zA-Z0-9_-]{3,16}(?=[ ,]|$)

Демо

Это должно дать вам совпадения только со словами, которые соответствуют вашим правилам.

Примечание: всегда держите - либо в самом начале, либо в самом конце, когда он находится в наборе символов, в противном случае он иногда ведет себя странно и дает неожиданные результаты.

0
ответ дан Pushpesh Kumar Rajwanshi 19 March 2019 в 16:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: