我有两个不同的文件名:
"Profile sep 3 2015.txt"
"Profile mar 5 2014 inactive.txt"
我需要的是一个捕获文件名的日期MMM dd yyyy
部分的正则表达式。
以前,我有一个正则表达式可以捕获它:
"^Profile (.*).txt$"
但这并不能解释非活动文件,因为它只会被日期捕获。我该怎么做呢?
答案 0 :(得分:1)
使用
/PATTERN_ABOVE/i
使用不区分大小写的标记(即(?i)
或在第一个\b
之前添加\b
。请参阅regex demo。它将匹配空格分隔的3个字母的月份,1或2位数字日和4位数年份。
<强>详情:
(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
- 领先的字边界\s+
- 一个月(?:0?[1-9]|[12][0-9]|3[01])
- 1+空格0?[1-9]
- 1或2天的数字
|
- 可选零和1-9范围内的数字[12][0-9]
- 或10
- 从29
到|
3[01]
- 或30
- 31
或\s+
\d{4}
- 见上文\b
- 4位数 - name: rss-reader
image: nickchase/nginx-php-rss:v3
ports:
- containerPort: 88
- 尾随字边界。答案 1 :(得分:1)
您没有提供特定的语言,因此虽然可能有其他方法可以做到这一点,但是一种相当便携的方法是使用带范围修饰符的POSIX字符类。例如:
^简介[[:空间:]] +([[:阿尔法:]] {3} [[:空间:]] + [[:数字:]] {1,2} [[:空间:] ] + [[:数字:]] {4})
有关解释,这里是使用Ruby中的扩展语法的示例:
str = "Profile mar 5 2014 inactive.txt"
pattern =
/ # start regular expression literal
^Profile # anchor to "Profile" at start of line
[[:space:]]+ # one or more space\/tab characters
( # start capture
[[:alpha:]]{3} # three alphabetical characters
[[:space:]]+ # one or more space\/tab characters
[[:digit:]]{1,2} # one or two digits
[[:space:]]+ # one or more space\/tab characters
[[:digit:]]{4} # exactly four digits
) # end capture
/x # close literal; set the Regexp::EXTENDED flag
str.match pattern; $1
#=> "mar 5 2014"
答案 2 :(得分:0)
以下模式有助于快速修复,我们可以通过其他验证来增强它。
\s+([jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec]{3}\s*[0-3]?[0-9]\s*\d{4})/ig
此模式包括:
附加截图仅供参考,更多示例可在 - http://regexr.com/
进行测试希望它有所帮助!