Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Регулярное выражение

Ответить
Настройки темы
.NET - Регулярное выражение

В Поисках Истины


Сообщения: 802
Благодарности: 135


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: LilLoco
Дата: 08-08-2013
Добрый день.

Есть Kml файл вида:
PHP код: Выделить весь код

<Placemark>

    <
name>сельское поселение</name>
    <
Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
    <
ExtendedData><SchemaData schemaUrl="#boundary">
        <
SimpleData name="Name">сельское поселение</SimpleData>
        <
SimpleData name="OSM_ID">-1848657</SimpleData>
        <
SimpleData name="ADMIN_LVL">8</SimpleData>
    </
SchemaData></ExtendedData>
      <
MultiGeometry><Polygon><outerBoundaryIs><LinearRing><coordinates>35.4913424,56.2869627 35.4866097,56.2876573 35.4835114,56.2879249 35.4866098,56.2876573 35.4913424,56.2869627</coordinates></LinearRing></outerBoundaryIs></Polygon><Polygon><outerBoundaryIs><LinearRing><coordinates>35.389971680241118,56.234632701458445 35.3899716,56.2346327 35.3854169,56.2349689 35.389971680241118,56.234632701458445</coordinates></LinearRing></outerBoundaryIs></Polygon><Polygon><outerBoundaryIs><LinearRing><coordinates>35.37138496178531,56.235423204282533 35.3713849,56.2354232 35.3704766,56.235525 35.37138496178531,56.235423204282533</coordinates></LinearRing></outerBoundaryIs></Polygon></MultiGeometry>
  </
Placemark>
ну и так далее... 

Нужно написать регулярное выражение чтобы найти все такие блоки. С регулярными выражениями очень туго Нужно вытащить все данные (Name, OSM_ID, ADMIN_LVL, Coordinates). Но на данный момент я не могу даже вытащить только <Placemark>.

Пробовал так:
Код: Выделить весь код
string textOfFile = System.IO.File.ReadAllText(@"boundary.kml");
Regex r = new Regex(@"<Placemark>\d\D*</Placemark>");
MatchCollection matches = r.Matches(textOfFile);
но ничего не находит.
Попробовал немного иначе:
Код: Выделить весь код
Regex r = new Regex(@"<Placemark>([\s\S]*)</Placemark>");
Находит одно совпадение! Я так понимаю между первым открытием тега и последним закрытием!

Прошу вашей помощи, подскажите как сделать на первом уровне, далее, думаю, сам разберусь.

Спасибо!

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 16:59, 26-06-2013

 

Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Regex(@"<Placemark>.*</Placemark>");
Такой вариант срабатывает?

-------
Ehhh.. what's up, doc?..


Отправлено: 17:35, 26-06-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


LilLoco, если это фактически xml — почему бы не работать с ним соответствующим способом?
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:44, 26-06-2013 | #3

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


вариант mrcnn + включи multiline (ели включается). В зависимости от реализации, может оказаться ещё так
Код: Выделить весь код
<Placemark>.*($.*)*</Placemark>
а ещё есть не менее эффективный способ, найти 2 тега (открывающий и закрывающий после него).

Отправлено: 21:23, 26-06-2013 | #4


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


Цитата pva:
вариант mrcnn + включи multiline (ели включается) »
Неа, не работает. Ни одного не находит.
Цитата pva:
найти 2 тега (открывающий и закрывающий после него). »
Имеете ввиду, найти их позиции в тексте, и вытаскивать текст между ними?
Цитата Iska:
если это фактически xml — почему бы не работать с ним соответствующим способом? »
В блоке, где описываются координаты, бывают разные виды (<MultiGeometry><Polygon><outerBoundaryIs><LinearRing>), поэтому думал будет проще находить регулярными выражениями, и, в зависимости от того какие данные, обрабатывать.

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 08:09, 27-06-2013 | #5


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


LilLoco, я поддерживаю Iska. Не изобретай велосипед, посмотри инструментарий работы с xml, проще будет.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 08:32, 27-06-2013 | #6


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


lxa85, Iska, Спасибо. Буду разбираться.

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 09:00, 27-06-2013 | #7


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Согласен с Iska, .Net дает большие возможности по работе с XML и не надо будет мучаться.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:29, 06-07-2013 | #8


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


Добрый день.
И снова они...регулярные выражения...

Подскажите как составить регулярное выражение для выбора списка элементов так чтобы текст начинался и заканчивался только цифрой, причем цифра может быть всего одна. В середине строки разрешить использовать только цифры, запятую, тире.

Спасибо.
Уж никак не могу подружиться с регулярными выражениями

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 15:14, 08-08-2013 | #9

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


можно так:
Код: Выделить весь код
^(\d)|(\d[\d\,\-]*\d)$
Если не принудиловка использовать регекспы, пиши алгоритмически - потом тебе же легче будет разбираться
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:35, 08-08-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Регулярное выражение

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Батничек для настройки "доверенной зоны" IE6 и "добавить... в сетевое окружение". RUVATA Скриптовые языки администрирования Windows 0 21-09-2010 10:16
[решено] Как из текста выбрать все выражения вида "{...}"? evg64 AutoIt 1 26-12-2009 23:38
Запретить/удалить пункт "Programs" ("Программы") из меню кнопки "Start" ("Пуск") submaster Microsoft Windows NT/2000/2003 5 13-09-2006 12:29
Поиск в яндекс.xml (выделено из "Зацените сайт!") Vampire Вебмастеру 21 11-09-2006 20:31
"Вход в систему недоступен" или "Не найден сервер для проверки пароля входа в сеть" rooty Microsoft Windows NT/2000/2003 8 23-08-2005 02:18




 
Переход