2015-12-14 3 views
-1

У меня есть следующий тег из файла XML:Regex без скобок

<msg><![CDATA[Method=GET URL=http://test.de:80/cn?OP=gtm&Reset=1(Clat=[400441379], Clon=[-1335259914], Decoding_Feat=[], Dlat=[0], Dlon=[0], Accept-Encoding=gzip, Accept=*/*) Result(Content-Encoding=[gzip], Content-Length=[7363], ntCoent-Length=[15783], Content-Type=[text/xml; charset=utf-8]) Status=200 Times=TISP:270/CSI:-/Me:1/Total:271]]> 

Теперь я пытаюсь получить из этого сообщения: Clon, DLAT, Dlon и CLAT.

Однако, я уже создал следующее регулярное выражение:

(?<=Clat=)[\[\(\d+\)\n\n][^)n]+] 

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

спасибо, что заранее.

С наилучшими пожеланиями

+0

[Не разбора XML с регулярных выражений] (http://stackoverflow.com/a/1732454/3144928). Есть лучшие способы сделать это. –

+0

Он находится внутри элемента CDATA. Если он использует XML Parser для получения элемента CDATA, он должен извлечь информацию внутри с помощью регулярного выражения. Итак, в этом случае все в порядке. Просто не используйте регулярное выражение для всего XML-документа. –

+0

Проблема в том, что я делаю это для logstash. Для других частей я использовал xpath. Но для части CDATA xpath не работает. – cimbom

ответ

1

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

(clon|dlat|dlon|clat)=\[(-?\d+)\]

дает

enter image description here

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

Пример использования

Regex r = new Regex(@"(clon|dlat|dlon|clat)=\[(-?\d+)\]"); 
string s = ".. here's your cdata content .. "; 
foreach (Match match in Regex.Matches(input, pattern, RegexOptions.IgnoreCase)) 
{ 
     var name = match.Groups[1].Value; //will contain "clon", "dlat", "dlon" or "clat" 
     var inner_value = match.Groups[2].Value; //will contin the value inside the square-brackets, e.g. "400441379" 
     //Do something with the matches 
} 
+0

Здравствуйте, Maximilian. Большое спасибо за Ваш ответ. Можно ли получить значения без: «[» и «]»? Для других частей я использовал xpath. – cimbom

+0

Я не уверен, что вы имеете в виду «получение значений без квадратных скобок». Когда вы примените свое регулярное выражение к строке, вы получите совпадения и их группы. Группа с индексом 1 будет содержать первую группу захвата (т. Е. «Клон» или «dlat» и т. Д.), Вторая группа захвата является внутренним значением без квадратных скобок. Я добавил пример использования с .NET, но это та же концепция для JavaScript или любого языка, который вы используете. –

+0

Я имею в виду использование вашего Regex, я бы получил: Clat = [400441379], Clon = [- 1335259914], Dlat = [0], Dlon = [0]. Тем не менее, мне хотелось бы сделать так: Clat = 400441379, Clon = -1335259914, Dlat = 0, Dlon = 0. – cimbom