2013-05-23 3 views
0

Я хочу извлечь некоторые значения широты и долготы из файла KML, который выглядит как:Трудности с RegEx

 <coordinates>0.197118,48.003719,0.000000</coordinates> 
     // ... 
     <coordinates> 
     0.197120,48.003719,0.000000 
     0.197060,48.003792,0.000000 
     0.198390,48.004059,0.000000 
     </coordinates> 
     // ... 
     <coordinates>0.196763,48.003162,0.000000</coordinates> 

Таким образом, вы можете увидеть в тексте формат координат:

(space*)longitude,latitude,altitude\n // or 
(space*)<coordinates>longitude,latitude,altitude</coordinates>\n 

Таким образом, чтобы поймать широты, это нормально, я совпадения:

@".*?,(.*?),.*?$" // matching index 1 

И долготы, я использовал шаблон:

@" * (<coordinates>)? (.*?),(.*?),(.*?)$" // matching index 2 

Я пробовал много вещей, включая этот последний образец, но я всегда получаю как спички:

"<coordinates>0.197118", 
"0.197120" 
"0.197060" 
"0.198390" 
"<coordinates>0.196763" 

И вы его получили: я не хочу <coordinates>.

Что случилось в @" * (<coordinates>)? (.*?),(.*?),(.*?)$"?

Спасибо.

+3

dont использовать regex для этого. используйте синтаксический анализатор xml. – vikingosegundo

+1

или каркас kml http://kmlframework.com – vikingosegundo

+0

Что делать, если я хочу использовать RegEx? Я думаю, что для меня это будет быстрее (в моем случае), я просто думаю, что там что-то отсутствует. – Lucien

ответ

1

ИТАК плохой ход мной здесь, только один больше места стоя:

Вместо:

@" * (<coordinates>)? (.*?),(.*?),(.*?)$" 

я должен был сделать:

@" * (<coordinates>)?(.*?),(.*?),(.*?)$" 

Это исправить проблему! Нет необходимости в XML-парсере или что-то еще для этого ...

0

Вы усложнять его со всеми модификаторами жадности, посмотрите на my sample here, который просто работает:

(([0-9\.]+),([0-9\.]+),([0-9\.]+)[\w,]+)+ 

Кроме того, я согласен, что вы не должны разбор XML с регулярными выражениями в целом, но она может быть приемлемым быстрым взломом, если он значительно сокращает ваш код, и вам не нужно ничего другого из исходного файла.

+0

Да, мне нужны координаты. – Lucien

+0

Ну, это должно работать и не требует никакой последующей обработки - вы просто получите массив триплетов и отдельных массивов значений lng/lat/alt. Я не уверен, какой ядро ​​regexp использует iOS, но это в синтаксисе PCRE, который должен быть универсальным. –

+0

Я согласен, что это хороший совет, но это не то, что я хочу:/Я на самом деле пытаюсь исправить вашу ссылку :) – Lucien

0

Если вы действительно хотите использовать регулярное выражение, попробуйте неживую: @ ". *?". После сопоставления вам нужно выполнить итерацию результатов и удалить теги. Левое можно разделить на @ строка «»

Смежные вопросы