编写替换正则表达式

时间:2012-03-27 20:42:40

标签: c# regex

我需要一些写一个正则表达式的帮助。我有以下字符串,

xxx.yyy.wwwwwaaa_IN_123                
xxx.rrrttttt_IN_12355                  
zz.iiiiolll_IN_12                         
xxx.zzzz.rrrr.yyy.wwwwwwww_IN_1232 

使用Regex.Replace,我想将上述格式的字符串更改为

"$1($2)"其中$2是字符串末尾的数字,$1将是_IN_标记前的最后一个子字符串的前三个字母。< / p>

换句话说,

xxx.yyy.wwwwwaaa_IN_123                www(123)
xxx.rrrttttt_IN_12355                  rrr(12355)
iiiiolll_IN_12                         iii(12)
xxx.zzzz.rrrr.yyy.wwwwwwww_IN_1232     www(1232)

这就是我所拥有的,

".*.([^\.]{3})[^\.]_IN_+([0-9]+)"

但这仅取_IN_标记前的最后一个字母,而不是最后一个子字符串的前几个字母。

提前致谢

2 个答案:

答案 0 :(得分:2)

这就是诀窍,非贪婪的部分使它不会被捕获太多......

Regex.Match(input, @"(?:.*?\.)?(.{3})[^.]*?_IN_(\d+)");

答案 1 :(得分:0)

嗯,正确的正则表达式是:

Regex r = new Regex("([a-z]{3})[a-z]*_IN_(\d+)");

如果可能有大写字母,您可能需要RegexOptions.IgnoreCase。 如果将正则表达式定义为静态成员,则可以考虑使用RegexOptions.Compiled。

上述正则表达式将匹配字符串aaa_bbbbbb_IN_123中的bbb(123)。
L.B的答案与aaa相符。 弗雷德里克C的答案是不匹配的,因为没有“。” (就像你的第三个例子)