我对正则表达非常新。我想提取以下字符串 “109_Admin_RegistrationResponse_20130103.txt”
从该文件内容中,每行选择内容:
01-10-13 10:44 AM 47 107_Admin_RegistrationDetail_20130111.txt
01-10-13 10:40 AM 11 107_Admin_RegistrationResponse_20130111.txt
正则表达式不应该选择第二行,只有第一行应该返回true。
答案 0 :(得分:3)
你的正则表达式有很多不同的错误......
^
放在那里+
中缺少[a-zA-Z]
,因此只能匹配单个字符_
,因此与Admin_RegistrationResponse
不匹配\
,d{2}
仅匹配dd
。.
,或者它也会匹配123_abc_12345678atxt
(注意a
txt
之前}})你的正则表达式应该是
\d+_[a-zA-Z_]+_\d{4}\d{2}\d{2}\.txt$
可以简化为
\d+_[a-zA-Z_]+_\d{8}\.txt$
因为\d{2}\d{2}
看起来多余 - 除非您想要捕获群组,否则您会这样做:
\d+_[a-zA-Z_]+_(\d{4})(\d{2})(\d{2})\.txt$
答案 1 :(得分:1)
移除锚点并转义点:
\d+[a-zA-Z_]+\d{8}\.txt
答案 2 :(得分:0)
我是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];
}