正则表达式需求:仅当前置带连字符日期匹配时匹配*+数字模式
正则表达式匹配需求
我需要编写正则表达式,匹配以连字符开头的日期格式模式,以及可能跟在其后的* + digit模式。
输入文本示例:
- 19/03/2081 - 20 / 02 / 1982 - 11/3/1950 * 1 - 21 / 11 / 2120 * 500000 01 / 09 / 2021 - 21 / 09 / 2021 20 / 09 / 2021 * 3 ***12
我当前使用的正则表达式为:\-(\s*\d+\s*\/\s*\d+\s*\/\s*\d+)|\s*\*\s*\d+,它能正确匹配以下内容:
- 19/03/2081 - 20 / 02 / 1982 - 11/3/1950 * 1 - 21 / 11 / 2120 * 500000 - 21 / 09 / 2021
但该表达式还会错误匹配* 3和*12。我希望仅当前置的带连字符日期模式匹配时,才匹配* + digit模式,请问这可以通过正则表达式实现吗?
当然可以实现,核心是把* + digit部分设为日期模式的可选后缀,而非独立分支。你之前用|分支导致孤立的* + 数字被误匹配,调整结构后就能解决问题。
推荐正则表达式:
^\-\s*\d+\s*\/\s*\d+\s*\/\s*\d+(?:\s*\*\s*\d+)?$
表达式细节解释:
^:匹配行起始位置,确保整行以连字符开头\-\s*:匹配开头的连字符,允许后面跟任意空白字符\d+\s*\/\s*\d+\s*\/\s*\d+:匹配日期部分,支持数字前后的任意空白,兼容19/03/2081或20 / 02 / 1982这类格式(?:\s*\*\s*\d+)?:非捕获组,作为可选后缀匹配* + 数字组合,?表示这部分可存在也可不存在$:匹配行结束位置,确保整行都符合规则
启用多行模式(如正则引擎的MULTILINE flag)后,这个表达式会精准匹配所有符合要求的行,不会误抓孤立的* 3或*12。
内容的提问来源于stack exchange,提问作者Kilipukki
相关产品推荐
相关产品推荐

