【发布时间】:2020-12-16 21:43:18
【问题描述】:
我正在尝试从文本中获取剩余时间数据,但时间以月、周、日或小时的形式写入,而不是数字。我已经写了这个正则表达式,但它有点复杂。如何简化?
[0-99] month[s]?|[0-99] week[s]?|[0-99] day[s]?|[0-99] hour[s]?
示例输出:
2 days 4 hours
【问题讨论】:
标签: regex
我正在尝试从文本中获取剩余时间数据,但时间以月、周、日或小时的形式写入,而不是数字。我已经写了这个正则表达式,但它有点复杂。如何简化?
[0-99] month[s]?|[0-99] week[s]?|[0-99] day[s]?|[0-99] hour[s]?
示例输出:
2 days 4 hours
【问题讨论】:
标签: regex
[0-99] 相当于一个从 0 到 9 的字符集,加上字符 9 - 所以它相当于 [0-9] - (通常)相当于 \d。
包含单个字符的字符集是多余的 - 只需使用单个字符。
最后,由于交替之间唯一变化的是单词,所以在单词周围放置一个组并在组内交替:
\d (?:month|week|day|hour)s?\d
这相当于你原来的模式。但听起来您可能想要匹配最多 2 位数字,在这种情况下,您可以将其调整为:
\d{1,2} (?:month|week|day|hour)s?\d{1,2}
【讨论】: