我在字符串中重写两个“关键字”之间的字符串时遇到了一些问题。这是正在使用的正则表达式模式:
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。
答案 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.");