#c_sharp #регулярные_выражения
В строке "Теоретики3 и 2п4423рактики палинд4442рома выделили 2многочис2ленные4 погран24ичные2 с пал24инд4ром4м формы" найти слова состоящие из цифр и букв. Не могу написать регулярное выражение для задания, получилось только это: ([a-zA-Zа-яА-ЯёЁ]+\d+[a-zA-Zа-яА-ЯёЁ]+)|(\d+[a-zA-Zа-яА-ЯёЁ]+)|([a-zA-Zа-яА-ЯёЁ]+\d+) Но тогда слово пал24инд4ром4м разбивается на три, а погран24ичные2 не полностью выделяется.
Ответы
Ответ 1
((([a-zA-Zа-яА-ЯёЁ]+\d+)|(\d+[a-zA-Zа-яА-ЯёЁ]+))[a-zA-Zа-яА-ЯёЁ\d]*) т.е. ((одна или более буква, затем одна или более цифра) или (одна или более цифра, затем одна или более буква)) потом буквы либо цифрыОтвет 2
Регулярка такая (надо выставить флаг игнорирования регистра): (?=\w*(?!\d)\w)(?=\w*\d)\w+ Без подчёркиваний так: \b(?=\w*(?!\d)\w)(?=\w*\d)(?=((?!_)\w)+\b)\w+ Кстати, никакой привязки к языкам :) http://ideone.com/ZdG7Sa http://ideone.com/sIsUF4 using System; using System.Text.RegularExpressions; public class Test { public static void Main() { var str = "Теоретики3 и 2п4423ра_ктики палинд4442рома выделили\n" + "2многочис2ленные4 погран24ичные2 с пал24и_нд4ром4м формы"; foreach (Match match in Regex.Matches(str, @"(?=\w*(?!\d)\w)(?=\w*\d)\w+", RegexOptions.IgnoreCase)) Console.WriteLine(match.Value); Console.WriteLine("==="); foreach (Match match in Regex.Matches(str, @"\b(?=\w*(?!\d)\w)(?=\w*\d)(?=((?!_)\w)+\b)\w+", RegexOptions.IgnoreCase)) Console.WriteLine(match.Value); } }
Комментариев нет:
Отправить комментарий