正则表达式,用于在字符后提取文件名而无需扩展名

时间:2009-07-16 03:36:51

标签: .net regex

我正在寻找有关如何创建正则表达式的帮助,该表达式从字符串中提取子字符串,如下所示:

test123 #AMMA-TestFileName File's.xml

为...

AMMA-TEstFileName档案

基本上,删除第一个“#”及其前面的所有内容。此外,删除“.xml”文件扩展名。

任何帮助都表示赞赏,因为我刚开始使用正则表达式。这将用于支持.NET正则表达式API的Nintex工作流操作。

4 个答案:

答案 0 :(得分:3)

将模式锚定在字符串的末尾:

/#(.+)\.xml$/

答案 1 :(得分:1)

您要查找的字符串将位于第一组中。

/#(.+?)\.xml$/

在C#中

String extractFilename(String s) 
{
    Regex r = new Regex(@"#(?<filename>.+?)\.xml$", RegexOptions.Compiled);
    return r.Match(s).Result("${filename}"); 
}

编辑:删除转义#,为扩展添加了行尾限定符,并添加了C#示例

答案 2 :(得分:1)

如果你想照顾xml以外的扩展名

/#(.+)\..*$/

答案 3 :(得分:0)

编辑:显然这不是正则表达式,但它比正则表达式更快,所以我把它包括在内。

Path.GetFileNameWithoutExtension(s.Substring(s.IndexOf('#') + 1));