удобно задавать в виде групп, где каждая группа соответствует одному атрибуту. Приведу начальный фрагмент кода очередной тестирующей процедуры, в котором описываются строки текста и образцы поиска: public void TestAttributes() { string s1 = "tel: (831-2) 94-20-55 "; string s2 = "Адрес: 117926, Москва, 5-й Донской проезд, стр.10,кв.7"; string s3 = "e-mail: Valentin.Berestov@tverorg.ru "; string s4 = s1+ s2 + s3; string s5 = s2 + s1 + s3; string pat1 = @"tel:s(?<tel>((d|-)*)s(d|-)+)s"; string pat2= @"Адрес:s(?<addr>[0-9А-Яа-я -,.]+)s"; string pat3 =@"e-mail:s(?<em>[a-zA-Z.@]+)s"; string compat = pat1+pat2+pat3; string tel="", addr = "", em = ""; Строки s4 и s5 представляют строку разбираемого документа. Их две, для того чтобы можно было проводить эксперименты, когда атрибуты в документе представлены в произвольном порядке. Каждая из строк pat1, pat2, pat3 задает одну именованную группу в регулярном выражении, имена групп - tel, Адрес, e-mail - даются в соответствии со смыслом атрибутов. Сами шаблоны подробно описывать не буду - сделаю лишь одно замечание. Например, шаблон телефона исходит из того, что номеру предшествует код, заключенный в круглые скобки. Поскольку сами скобки играют особую роль, то для задания скобки как символа используется пара - "(". Это же касается и многих других символов, используемых в шаблонах, - точки, дефиса и т.п. Строка compat представляет составное регулярное выражение, содержащее все три группы. Строки tel, addr и em нам понадобятся для размещения в них результатов разбора. Применим вначале к строкам s4 и s5 каждый из шаблонов pat1, pat2, pat3 в отдельности и выделим соответствующий атрибут из строки. Вот код, выполняющий эти операции: |