这可能很简单,但我甚至不确定我应该谷歌哪个词来找到答案。原谅我的高傲。
我有字符串(文件名),如下所示:
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}
在这种情况下并没有给我我想要的东西,因为这可能与网站混淆,或者可能记录计数
我如何负责任地完成这种“子串”'用一个正则表达式?
答案 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