正则表达式抓取并重写其他两个关键字之间的字符串

时间:2013-07-03 22:17:53

标签: c# 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”

KLAX 032109Z 26014KT 10SM FEW070 SCT120 BKN220 21/17 A2986 RMK AO2

我希望它能在7000点返回一些云,但它在070处返回少量云。

我一直在使用this program来测试正则表达式并使用上面的模式,它会像它应该的那样返回7。

2 个答案:

答案 0 :(得分:1)

试试这个:

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

答案 1 :(得分: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