2013-07-03 4 views
0

У меня возникли проблемы с переписанием строки между двумя «ключевыми словами» в строке. Вот шаблон регулярного выражения в вопросе:Regex захватить и переписать строку между двумя другими ключевыми словами

modify = Regex.Replace(modify, "FEW([0-9]{3})", "few clouds at $1."); 
modify = Regex.Replace(modify, @"(?s)(?<=[0-9]{2}SM).+0([0-9]{1})0.+?(?=[0-9]{2}/[0-9]{2})", "$2 thousand"); 

В принципе мне нужно, чтобы получить слои облаков в METAR, в частности, «FEW070»

KLAX9Z 26014KT 10SM FEW070 SCT120 BKN220 21/17 A2986 RMK AO2 

Я хочу, чтобы вернуть несколько облаков в 7 тысяч , но он возвращает несколько облаков при 070.

Я использовал this program для проверки выражений регулярных выражений и использования вышеуказанного шаблона, он возвращает 7, как следует.

+0

'modify = Regex.Replace (изменить, @" FEW0? (\ D) 0? \ W + "," несколько облаков в $ 1 тыс. ");' Работает для меня, но я не уверен, что это то, что вы хотите. Выход заканчивается: 'KLAX9Z 26014KT 10SM несколько облаков на 7 тысяч. SCT120 BKN220 21/17 A2986 RMK AO2' – Tawnos

ответ

1

Попробуйте это:

modify = Regex.Replace(modify, @"FEW0*(\d+)0", "few clouds at $1,000."); 
+0

Просто попробовал, но VS возвращает ошибку: «Unrecognized escape sequence» – Spencer

+0

попробуйте заменить \ d на [0-9] или \\ d – dda

+1

@Spencer, поместите '@' в перед строкой шаблона. – GSee

0

A simpler regex, вероятно, будет лучше, но вот что случилось с вашими:

  • Ни (?s), ни (?<=...) захватывают группы, таким образом, вы должны использовать $1 вместо $2 к получите 7.
  • Вы заменяете строку "few clouds at 070", но затем вы не помните снова часть "few clouds at ". Вы должны положить .+ в скобки и использовать $1$2 вместо $1.
  • Возможно, вы должны использовать .+? вместо .+.

Окончательный код:

modify = Regex.Replace(modify, "FEW([0-9]{3})", "few clouds at $1"); 
modify = Regex.Replace(modify, @"(?s)(?<=[0-9]{2}SM)(.+?)0([0-9]{1})0.+?(?=[0-9]{2}/[0-9]{2})", "$1$2 thousand."); 

Test.

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