捕获日期正则表达式

时间:2016-11-29 23:43:42

标签: regex regex-negation

我有两个不同的文件名:

"Profile sep 3 2015.txt"

"Profile mar 5 2014 inactive.txt"

我需要的是一个捕获文件名的日期MMM dd yyyy部分的正则表达式。

以前,我有一个正则表达式可以捕获它:

"^Profile (.*).txt$"

但这并不能解释非活动文件,因为它只会被日期捕获。我该怎么做呢?

3 个答案:

答案 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字符类

您没有提供特定的语言,因此虽然可能有其他方法可以做到这一点,但是一种相当便携的方法是使用带范围修饰符的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

此模式包括:

  • 月份(mmm)应具有3的一致长度和不区分大小写
  • 日应采用NN格式
  • 年份应采用NNNN格式
  • 月/日/年之间的空格是可选的

附加截图仅供参考,更多示例可在 - http://regexr.com/

进行测试

enter image description here

希望它有所帮助!