Регулярное выражение для извлечения координат GPS C#

#c# #regex

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

Вопрос:

У меня есть HTML-файл с координатами GPS, который я хочу извлечь, я пытаюсь сделать это, создав регулярное выражение, но пока безуспешно.

Я использую C # для синтаксического анализа HTML-файла

Вот пример данных GPS, которые следует извлечь.

 S 33 58.254 E 023 53.269
  

любая помощь была бы оценена.

Это пример текста, в котором указаны координаты GPS

 <span style="text-decoration: underline;">TOURIST INFORMATION</span><br>
Tourism Office <span style="font-style: italic;">(S 33 58.254 E 023
53.269, Gammasi St, 042-281-1098,)
  

и мне нужно только извлечь S 33 58.254 E 023 53.269

Комментарии:

1. Почему вы используете регулярное выражение вместо гораздо более простого string.Split ?

2. @Oded Я не думаю, что string.Split это хороший вариант здесь. Он хочет извлекать коды GPS, а не разбирать сам код GPS.

3. @Oscar — его правка прояснила это. Раньше это было неясно.

Ответ №1:

Вот пример на C #, на случай, если вы захотите проанализировать GPS, а не только извлечь его из HTML-кода:

 var text = @"Some example that contains S 33 58.254 E 023 53.269 
                  and also S 22 58.123 W 021 53.2";
var pattern = @"([SN])s(d )s(d (?:.d )?)s([EW])s(d )s(d (?:.d*)?)";
var m = Regex.Matches(text, pattern);
for (int i = 0; i < m.Count; i  ) {
    Console.WriteLine("GPS Found: {0}", m[i].Value);
    Console.WriteLine("-----");
    Console.WriteLine(m[i].Groups[1].Value);
    Console.WriteLine(m[i].Groups[2].Value);
    Console.WriteLine(m[i].Groups[3].Value);
    Console.WriteLine(m[i].Groups[4].Value);
    Console.WriteLine(m[i].Groups[5].Value);
    Console.WriteLine(m[i].Groups[6].Value);
    Console.WriteLine("-----");
}
  

Приведенный выше пример выведет:

 GPS Found: S 33 58.254 E 023 53.269  
-----  
S  
33  
58.254  
E  
023  
53.269  
-----  
GPS Found: S 22 58.123 W 021 53.2  
-----  
S  
22  
58.123  
W  
021  
53.2  
-----  
  

Редактировать:
Я действительно не знаю, могут ли такие значения, как 53.2 , быть целыми числами, например 53 , но у меня это было учтено на всякий случай.

Ответ №2:

Это базовое соответствие, просто поиграйте с ним немного для достижения лучших результатов:

 [SN]sd sd .d s[EW]sd sd .d 
  

Комментарии:

1. Это s (строчная буква «s») для пробелов, а не S .

Ответ №3:

Я бы сначала начал с изучения «возможностей». Я бы написал

[SN]s-?d{1,3]sd .d s[EW]s-?d{1,3]sd .d

Это просто плевательская удача!

Ответ №4:

Если ваш шаблон данных постоянен, я имею в виду часть в стиле span ( < span style="font-style: italic;" > )

Почему бы вам просто не попробовать GetStringBetween italic;">( и ,

Ниже приведен метод, который я написал для своего использования:

 public static string GetStringBetween(string input, int searchStartIndex, string startMarker, string endMarker, out int foundAtIndex)
{
    foundAtIndex = -1;
    if (input == null)
        return null;
    int st = searchStartIndex;

    int startIndex = input.IndexOf(startMarker, st);
    if (startIndex < 0)
        return null;
    int endIndex = input.IndexOf(endMarker, startIndex   startMarker.Length);
    if (endIndex < 0)
        return null;
    int occurenceIndex = startIndex   startMarker.Length;
    string data = input.Substring(occurenceIndex, endIndex - occurenceIndex);
    foundAtIndex = occurenceIndex;
    return data;
}
  

Начните с searchStartIndex = 0 , а затем продолжайте вызывать его в цикле с новым searchStartIndex = foundAtIndex из предыдущего вызова. Таким образом, вы получите все интересующие вас строки GPS только из полного файла.