Показаны сообщения с ярлыком RegExpr. Показать все сообщения
Показаны сообщения с ярлыком RegExpr. Показать все сообщения

RegexOptions

25 мая 2011 г. | | |

Есть файл с содержимым вида

<Book>
   <Page number='1'><![CDATA[line1
                                line2
                                line3]]>
   </Page>
   <Page number='2'><![CDATA[line1]]>

   </Page>
</Book>


Нужно распарсить содержимое через RegExpr. Вроде ничего сложного. Тест для класса PageParser должен срабатывать:

//PageParser
class PagePaerser
{
  public static IList<Page> Parse(string xml)
  {
     IList<Page> pages = new List<Page>();
     string pattern = "<Page number='(?<number>\\d*?)'><\\!\\[CDATA\\[(?<content>.*?)\\]\\]><\\/Page>";
     var matches = Regex.Matches(xml, pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);
     if (matches.Count>0)
     {
        foreach(Match match in matches)
        {
            pages.Add(new Page()
            {
              content = match.Groups["content"].Captures[0].Value,
              number = int.Parse(match.Groups["number"].Captures[0].Value)
           });
        }
    }
    return pages;
  }
}


[TestMethod]
public void ParseMethod_ListOfPages_Test()
{
   var parsed_pages = PageParser.Parse(@"
<Book>
      <Page number='1'><![CDATA[line1
                                  line2
                                  line3]]>
      </Page>
      <Page number='2'><![CDATA[line1]]>

      </Page>
   </Book>

");
   Assert.AreEqual(2, parsed_pages.Count);
}

Но тест не срабатывает. Дело в том, что в RegExpr для обработки multiline-строк, нужно вместо флага RegexOptions.Multiline устанавливать RegexOptions.Singleline, который меняет режим символа "." на улавливание совпадений со всеми символами, а не всех символов, кроме новой строки (\n)

Регулярные выражения

29 мая 2010 г. | | |

Для облегчения работы с регулярными выражениями я использую бесплатную утилиту от Rad Software - Regular Expression Designer.


Среди фич можно выделить следующие:

Удобное отображение результата выполнения выражения - строится многоуровневое дерево для Matches, Groups и Captures. При клике на ветку дерева в исходном тексте выделяется фрагмент, соответствующий результату.

Очень удобно сделано окно "Language Element" - справочник по регулярным выражения всегда под рукой. Но для не владеющих английским (о_О) он может оказаться не очень полезным.

Найти более подробное описание программы и скачать ее можно на сайте разработчика - http://www.radsoftware.com.au/regexdesigner/