【问题标题】:How can I use 'Regex' to extract a file name?如何使用“正则表达式”提取文件名?
【发布时间】:2012-06-28 09:43:13
【问题描述】:

我想从以下文本中提取文件名13572_BranchInformationReport_2012-06-28.zip-

1:30","/icons/def13572_BranchInformationReport_2012-06-28.zip","13572_BranchInformationReport_2012-06-28.zip",0,"184296","6 月 28 日

我使用的正则表达式代码是:

var fileNames = from Match m in Regex.Matches(pageSource, @"[0-9]+_+[A-Za-z]+_+[0-9]+-+[0-9]+-+[0-9]+.+(acc|zip|app|xml|def|enr|exm|fpr|pnd|trm)")
                select m.Value;

应该可以正常工作。

我错过了什么?

【问题讨论】:

  • 愚蠢的问题,但您那里似乎有 CSV 数据。你不能改用 CSV 库吗?
  • @RB 表示他的问题可能很愚蠢,而不是说 akhil 的问题很愚蠢。这是一个常见的、自嘲的英语短语。
  • @我会理解这个事实,但我认为没有任何问题是愚蠢的。可能是它的组织不正确,但这并不是一个愚蠢的问题。

标签: c# asp.net regex


【解决方案1】:

您需要转义 .在正则表达式的中间,因为 .匹配任何字符。

@"[0-9]+_+[A-Za-z]+_+[0-9]+-+[0-9]+-+[0-9]+\.+(acc|zip|app|xml|def|enr|exm|fpr|pnd|trm)"

【讨论】:

  • 是的,但是为了完全匹配字符。你必须使用\。在你的正则表达式中。您必须转义点以完全匹配它,否则正则表达式假定您的意思是绝对任何字符都会在您拥有该点时执行。 regular-expressions.info/dot.html
【解决方案2】:

试试下面的正则表达式:

[0-9]+_+[A-Za-z]+_+[0-9]+-+[0-9]+-+[0-9]+.+(acc|zip|app|xml|def|enr|exm|fpr|pnd|trm)(?=",")

【讨论】:

    【解决方案3】:

    你可以试试下面的正则表达式:

    \d{5}_\w*_\d{4}-\d{2}-\d{2}\.(acc|zip|app|xml|def|enr|exm|fpr|pnd|trm)
    

    这将匹配任何内容:

    1. 以五位数字开头
    2. 然后是下划线
    3. 然后是任意数量的字母或数字
    4. 然后是下划线
    5. 然后是日期部分:四位数字,破折号,两位数字,破折号,最后两位。
    6. 然后是句号
    7. 最后是扩展。

    PowerShell 示例:

    $text = '1:30","/icons/def13572_BranchInformationReport_2012-06-28.zip","13572_BranchInformationReport_2012-06-28.zip",0,"184296","Jun 28'
    
    $regex = '\d{5}_\w*_\d{4}-\d{2}-\d{2}\.(acc|zip|app|xml|def|enr|exm|fpr|pnd|trm)'
    
    $text -match $regex
    
    $matches[0]
    

    【讨论】:

    • 您可以在 C# 代码中使用该正则表达式。我刚刚发布了 PowerShell 以证明它有效;-)
    猜你喜欢
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2011-04-07
    • 2019-10-16
    • 1970-01-01
    相关资源
    最近更新 更多