我需要一些写一个正则表达式的帮助。我有以下字符串,
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_
标记前的最后一个字母,而不是最后一个子字符串的前几个字母。
提前致谢
答案 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的答案是不匹配的,因为没有“。” (就像你的第三个例子)