#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 только из полного файла.