正则表达式条件特性理解及日期匹配规则调整技术求助
正则表达式调整方案
需求回顾
需调整现有正则,实现:
- 允许匹配
2811 16.12(起始日期连写、结束日期带分隔符)或28.11 16.12(两个日期均带分隔符)格式; - 拒绝
2811 1612(两个日期均连写)或28111612(日期块间无分隔符)格式。
原正则:
\D*(?P<from_day>[12]\d|3[01]|0?[1-9])[.\s,■\-]* (?P<from_month>1[0-2]|0?[1-9])[.\s,■\-]* (?P<until_day>[12]\d|3[01]|0?[1-9])[.\s,■\-]* (?P<until_month>1[012]|0?[1-9]).*|.+
调整后的正则
^\D*(?P<from_day>[12]\d|3[01]|0?[1-9])[.\s,■\-]*(?P<from_month>1[0-2]|0?[1-9])[.\s,■\-]+(?P<until_day>[12]\d|3[01]|0?[1-9])[.\s,■\-]+(?P<until_month>1[012]|0?[1-9]).*$
关键修改说明
- 强制日期块间的分隔符:将原正则中
from_month与until_day之间的[.\s,■\-]*改为[.\s,■\-]+,确保两个日期块之间至少有一个指定分隔符(空格、点号、逗号、方块、短横线),直接拒绝28111612这类无分隔的连续日期。 - 强制结束日期的内部分隔:将
until_day与until_month之间的[.\s,■\-]*改为[.\s,■\-]+,确保结束日期的日和月之间必须有至少一个分隔符,拒绝2811 1612这类结束日期连写的情况。 - 起始日期保留灵活格式:起始日期的日和月之间仍用
[.\s,■\-]*,允许连写(如2811)或带分隔(如28.11)的格式。
内容的提问来源于stack exchange,提问作者Tollpatsch
相关产品推荐
相关产品推荐

