Regex 正则表达式从行内容中提取文件名

Regex 正则表达式从行内容中提取文件名,regex,Regex,我对正则表达式非常陌生。我想提取以下字符串 “109_Admin_RegistrationResponse_20130103.txt” 从该文件内容中,每行选择内容: 01-10-13 10:44AM 47 107行政注册详情20130111.txt 01-10-13 10:40AM 11 107行政注册回复20130111.txt 正则表达式不应该选择第二行,只有第一行应该返回true。您的正则表达式有很多不同的错误 您的行不是以所需的文件名开头,而是在那里放置了一个^ 字符组中缺少+,[a-

我对正则表达式非常陌生。我想提取以下字符串 “109_Admin_RegistrationResponse_20130103.txt”

从该文件内容中,每行选择内容:
01-10-13 10:44AM 47 107行政注册详情20130111.txt
01-10-13 10:40AM 11 107行政注册回复20130111.txt


正则表达式不应该选择第二行,只有第一行应该返回true。

您的正则表达式有很多不同的错误

  • 您的行不是以所需的文件名开头,而是在那里放置了一个
    ^
  • 字符组中缺少
    +
    [a-zA-Z]
    ,因此只能匹配单个字符
  • 您的角色组中不包含
    \u
    ,因此它与
    管理员注册响应
  • 缺少
    \
    d{2}
    将只匹配
    dd
  • 根据M42的答案(我省略了),您还需要将点
    也转义,否则它也会匹配
    123\u abc\u 12345678atxt
    (注意
    txt
    之前的
    a
  • 你的正则表达式应该是

    \d+[a-zA-Z]+\d{4}\d{2}\d{2}\.txt$

    可以简化为

    \d+[a-zA-Z]+\d{8}\.txt$

    由于
    \d{2}\d{2}
    看起来确实是多余的--除非您想捕获组,否则您应该执行以下操作:


    \d+\u[a-zA-Z]+\u(\d{4})(\d{2})(\d{2})\.txt$

    您的正则表达式有许多不同的错误

  • 您的行不是以所需的文件名开头,而是在那里放置了一个
    ^
  • 字符组中缺少
    +
    [a-zA-Z]
    ,因此只能匹配单个字符
  • 您的角色组中不包含
    \u
    ,因此它与
    管理员注册响应
  • 缺少
    \
    d{2}
    将只匹配
    dd
  • 根据M42的答案(我省略了),您还需要将点
    也转义,否则它也会匹配
    123\u abc\u 12345678atxt
    (注意
    txt
    之前的
    a
  • 你的正则表达式应该是

    \d+[a-zA-Z]+\d{4}\d{2}\d{2}\.txt$

    可以简化为

    \d+[a-zA-Z]+\d{8}\.txt$

    由于
    \d{2}\d{2}
    看起来确实是多余的--除非您想捕获组,否则您应该执行以下操作:


    \d+\u[a-zA-Z\]+\u(\d{4})(\d{2})(\d{2})\.txt$

    移除锚固件并逃离点:

    \d+[a-zA-Z_]+\d{8}\.txt
    

    移除锚固件并脱离dot:

    \d+[a-zA-Z_]+\d{8}\.txt
    

    我是php的新手,但我认为您可以在php中使用
    explode()
    函数或您的语言中的任何等效函数

    $string = "01-09-13 10:17AM 11 109_Admin_RegistrationResponse_20130103.txt";
    $pieces = explode("_", $string);
    
    $stringout = "";
    foreach($i = 0;$i<count($pieces);i++){
     $stringout = $stringout.$pieces[$i];
    }
    
    $string=“01-09-13 10:17AM 11 109_Admin_RegistrationResponse_20130103.txt”;
    $pieces=分解(“25;”,$string);
    $stringout=“”;
    
    foreach($i=0;$i我是php的新手,但我认为您可以在php中使用
    explode()
    函数或您语言中的任何等效函数

    $string = "01-09-13 10:17AM 11 109_Admin_RegistrationResponse_20130103.txt";
    $pieces = explode("_", $string);
    
    $stringout = "";
    foreach($i = 0;$i<count($pieces);i++){
     $stringout = $stringout.$pieces[$i];
    }
    
    $string=“01-09-13 10:17AM 11 109_Admin_RegistrationResponse_20130103.txt”;
    $pieces=分解(“25;”,$string);
    $stringout=“”;
    
    foreach($i=0;$iI如果输入是那一行,那么
    [^\s]*$
    ?您的编程语言是什么?Luiges90提供的答案似乎正确,我刚刚意识到我需要包含短语“RegistrationDetail”在正则表达式上,正如上面的示例所示,因此它只选择带有该短语的文件名。如果输入是该行,那么
    [^\s]*$
    如何?您的编程语言是什么?Luiges90提供的答案似乎正确,我刚刚意识到我需要包含短语“RegistrationDetail”在正则表达式上,正如上面的例子所示,因此它只选择带有该短语的文件名。您提供的答案似乎正确,我刚刚意识到我需要包含短语“RegistrationDetail”在正则表达式上,正如上面的例子所示,因此它只选择那些带有这些短语的文件名。我得到了它,感谢您的帮助。\d++[a-zA-Z++[RegistrationDetail]+\d{8}.txt$好吧,你没有把
    RegistrationDetail
    放在字符组中-你不会匹配
    [RegistrationDetail]
    中包含任何字符的任何字符串,或者,字面上说,
    [aegilnorstRD]
    …我想你想要
    \d+[a-zA-Z]+\u RegistrationDetail\d{8}.txt$
    与您提供的答案似乎正确相反,我刚刚意识到我需要在正则表达式中包含短语“RegistrationDetail”,正如上面的示例所示,这样它只会选择带有这些短语的文件名。我得到了它,感谢您的帮助。\d++[a-zA-Z++[RegistrationDetail]+\d{8}.txt$好吧,你没有把
    RegistrationDetail
    放在字符组中-你不会匹配
    [RegistrationDetail]
    中包含任何字符的任何字符串,或者,字面上说,
    [aegilnorstRD]
    …我想你想要的是
    \d+\uu[a-zA-Z]+\uu RegistrationDetail\ud{8}.txt$