我想找到日期的组合。我有以下正则表达式。
\b([\d]{1,2}[\/\s-]{0,3}\d{2,4})
我想匹配以下组合:
8/1967 or 8-1967
08/1967 same
8/67 same
08/67 same
我不希望它与以下
匹配08/967
这就是我想要" /"之后的组合。或" - "为2位数或4位数。 但是" \ d {2,4}"如果2,3和4会给出组合。但是我不知道如何将它限制为2或4.如果这个正则表达式有任何其他问题,请告诉我。求助。
答案 0 :(得分:3)
如果您要匹配月份和年份,请执行
\b((?:0?[1-9]|1[0-2]) ?[/-] ?(?:[12][0-9])?[0-9]{2})\b
说明:
\b
- 非字母数字和字母数字字符之间的字边界(?:0?[1-9]|1[0-2])
- 1-12和01-12(前导零)?
- 分隔符两侧可能的空格[-/]
1个分隔符,或 - 或/ (?:[12][0-9])?[0-9]{2})
- 以1或2开头的4位数字,或任意数字的2位数字。\b
- 以字边界结尾(下一个字符不是字母数字)。这将匹配以下字符串:03-1902
,12 / 2014
,6 / 03
但不会与3 / 3009
,13/2009
或26-30
,3///60
或12/34567
中的任何一个匹配。
我使用[0-9]
代替\d
,因为\d
依赖于区域设置。
要匹配日期范围(你可能在这里做cv / resume解析器?),你可以这样做:
date_re = r'\b((?:0?[1-9]|1[0-2]) ?[/-] ?(?:[12][0-9])?[0-9]{2})\b'
date_span = r'%s(?:[\s-]+)-\s*%s' % (date_re, date_re)
在date_span
中生成以下正则表达式:
\b((?:0?[1-9]|1[0-2]) ?[/-] ?(?:[12][0-9])?[0-9]{2})\b(?:[\s-]+)-\s*\b((?:0?[1-9]|1[0-2]) ?[/-] ?(?:[12][0-9])?[0-9]{2})\b
答案 1 :(得分:2)
将\d{2,4}
更改为\d{2}(\d{2})?
这会让你得到你想要的。
首先匹配2位数字,然后是两位数组合只有一次。
这恰好是2或4位数。
答案 2 :(得分:0)
\b((?<!\/)[\d]{1,2}[\/\s-]{0,3}(?!\d{3}\b)\d{2,4})
试试这个。看看演示。
https://regex101.com/r/wX9fR1/11
(?!\d{3}\b
将使3位数字不匹配。