Regex在另外两个关键字之间抓取并重写字符串
本文关键字:之间 关键字 抓取 字符串 重写 两个 Regex | 更新日期: 2023-09-27 18:20:51
我在重写字符串中两个"关键字"之间的字符串时遇到了一些问题。以下是有问题的正则表达式模式:
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时返回几朵云。
我一直在使用这个程序来测试regex表达式,使用上面的模式,它会像应该的那样返回7。
试试这个:
modify = Regex.Replace(modify, @"FEW0*('d+)0", "few clouds at $1,000.");
一个更简单的正则表达式可能会更好,但以下是您的问题:
(?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.");
测试。