对Regex返回的值执行Regex

时间:2016-09-13 18:14:07

标签: regex

这可能很简单,但我甚至不确定我应该谷歌哪个词来找到答案。原谅我的高傲。

我有字符串(文件名),如下所示:

site12345678_date20160912_23001_to_23100_of_25871.txt

此命名约定的含义为"记录23001至23100,其中25871为2016年9月12日的网站12345678(20160912)"

我想要做的是提取日期部分(_date和以下_之间的数字)

正则表达式:.*(_date[0-9]{8}).*将返回字符串_date20160912。但我真正想要的只是20160912。显然,[0-8]{8}在这种情况下并没有给我我想要的东西,因为这可能与网站混淆,或者可能记录计数

我如何负责任地完成这种“子串”'用一个正则表达式?

2 个答案:

答案 0 :(得分:0)

  

正则表达式:.*(_date[0-9]{8}).*将返回字符串_date20160912

这意味着您在需要完整字符串匹配的方法中使用正则表达式,并且您可以访问Group 1值。您需要在正则表达式中进行更改的唯一方法是捕获组放置:

.*_date([0-9]{8}).*
       ^^^^^^^^^^

请参阅regex demo

答案 1 :(得分:0)

您只需要转移括号,以便更改捕获组,包括' _date'在里面。然后你想要寻找你的捕获组#1:

例如,如果在python中完成,它看起来像:

import re
regex = '.*_date([0-9]{8}).*'
str = 'site12345678_date20160912_23001_to_23100_of_25871.txt'
m = re.match(regex, str)
print m.group(0)   # the whole string
print m.group(1)   # the string you are looking for '20160912'

在此处查看此行动:https://eval.in/641446