正则表达式匹配字符串中所有工作日的名称

时间:2017-04-07 15:19:48

标签: python regex match

我希望每个星期都匹配一个字符串,其中所有单词都以逗号分隔。

实施例: 应该匹配“星期一,星期四,油炸” “mon,tue,sat”应该匹配 “”不应该匹配 应该匹配“星期一,星期二,星期五,星期四,星期五,星期日,星期日” “foo,bar”不应该匹配

我想出了这个正则表达式,但它只匹配包含所有工作日的字符串:

^(mon|tue|wed|thu|fri|sat|sun)$

我如何“独立地”匹配它们?

我正在使用python3

2 个答案:

答案 0 :(得分:1)

我没有给你直接答案,而是试着教你钓鱼。

使用交互式正则表达式工具(例如http://pythex.org),首先输入测试字符串,然后迭代正则表达式字符串,直到所有测试字符串都符合您的规范。

我会给你一个暗示,你需要使用捕获组和可能的量词。

互动设施通常有一个"正则表达式备忘单"你可以咨询给你的想法。

祝你的作业好运!

答案 1 :(得分:1)

如果您能够使用较新的 regex 模块,则可以使用recursive approach

^((?:mon|tue|wed|thu|fri|sat|sun)(?:, )?)(?1)*$'

<小时/> 在Python中,这将是:

import regex as re

string = """
mon, tue, fri
mon, tue, sat
mon, tue, wed, thu, fri, sat, sun
foo, bar
mon
tue
wed
mon, wed
"""

rx = re.compile(r'^((?:mon|tue|wed|thu|fri|sat|sun)(?:, )?)(?1)*$')
days = list(filter(lambda x: rx.match(x), string.split("\n")))
print(days)