正则表达式在最后截断字符串

时间:2012-02-14 14:38:54

标签: c# regex

我有一组复杂的文件编号,需要使用Regex进行过滤,如下所示。

E/T66/2004Q/2009AA         --- remove  'AA'   ==> E/T66/2004Q/2009
E/T66/2004Q/2001 Vol1      --- remove ' Vol1' ==> E/T66/2004Q/2001
E/T66/2004Q/2001Vol1       --- remove 'Vol1'  ==> E/T66/2004Q/2001
E/T66/2004/123/3/1999 Pc3  --- remove ' pc3'  ==> E/T66/2004/123/3/1999
E/T78/2004A                --- remove 'A'     ==> E/T78/2004

到目前为止,我已经使用了这个正则表达式([^ / D] + $)来匹配最后一个'/'之后的部分 我需要从字符串末尾的字符串末尾处找到非Digit的位置。

提前感谢您的时间!

5 个答案:

答案 0 :(得分:3)

使用此功能删除不需要的项目(\D+\d*)$

这是一个工作的例子: http://jsfiddle.net/BzyUL/4/

答案 1 :(得分:3)

我认为根据你想要保留的内容而不是你想要丢失的内容来定义它更容易。

.*/\d+

上述内容将匹配所有字符,包括最终/,然后是任意数字的数字。当它到达第一个非数字字符时,这个匹配将停止,这是你要开始扔东西的地方。

示例代码:

var re = new Regex("(.*/\\d+).*");
Console.WriteLine(re.Replace("E/T78/2004A", "$1"));

这适用于以上所有示例。

答案 2 :(得分:0)

如果最后总共有4个数字,那么/(^.+\/\d\d\d\d)/将匹配您要保留的所有示例中的部分。所以只需匹配模式,然后用匹配的字符串替换字符串。

/(^.+\/\d{4})/你的版本有点短。

答案 3 :(得分:0)

使用此正则表达式仅匹配完整路径或文件名(无差异):

((\w+\/)*\d{4})(.*)

并将其替换为$1,如下所示:

var regexp = new Regex(@"((\w+\/)*\d{4})(.*)");
string result = regexp.Replace(path, "$1"));

删除年份数字后的不需要的字符。

答案 4 :(得分:0)

感谢大家提供的所有反馈。我已经尝试过所有这些并从你身上学到了很多东西!我最终在这里使用了“。* / \ d +”选项。