【问题标题】:Regular expression to extract filename after a character and without extension正则表达式在字符后提取文件名且不带扩展名
【发布时间】:2009-07-16 03:36:51
【问题描述】:

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

test123 #AMMA-TestFileName 文件的.xml

到...

AMMA-TEstFileName 文件的

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

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

【问题讨论】:

    标签: .net regex


    【解决方案1】:

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

    /#(.+)\.xml$/
    

    【讨论】:

      【解决方案2】:

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

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

      在 C# 中

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

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

      【讨论】:

      • 大家反应迅速,非常感谢。 Nintex 不允许我直接在工作流操作中编写代码以获取第 1 组,因此我使用上面的示例创建了一个 Web 服务来调用和完成工作。
      【解决方案3】:

      如果你想处理 xml 以外的扩展

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

      【讨论】:

      • 应该结束匹配是 \.[^\.]+$ 所以 file..ext 只切断最后一个 .ext
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2022-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-29
        • 2013-03-18
        • 1970-01-01
        • 2020-03-11
        • 2019-02-19
        相关资源
        最近更新 更多