例如,我对变量日的输入可以是星期一或星期一,星期二或星期一,..,星期五,我正在尝试在python中使用正则表达式来提供模式并检查其输入。
result = re.compile(r'\([S|M|T|W|Th|F|Sa]\)|\([S|M|T|W|Th|F|Sa],[S|M|T|W|Th|F|Sa]+\)')
day = "(T,Th)"
if result.match(day):
print "matched"
else:
print 'not'
如果给定的输入是(T,Th,F)或(T,Th,F,Sa)怎么办?我应该怎样做才能处理这些输入?有没有解决方案所以它不会冗长?
答案 0 :(得分:4)
没有正则表达式的答案是:
week = ["S", "M", "T", "W", "Th", "F", "Sa"]
days = "(T,Th,C)"
no_match = False
for day in days[1:-1].split(","): #split separates your days-string, [1:-1] removes brackets
if day not in week:
no_match = True
break
if no_match:
print "not"
else:
print "matched"
[1:-1]是切片表示法,基本上它创建一个字符串,从索引为1(=第2个字符)的字符开始,以倒数第二个字符结束。实际上它删除了括号。
答案 1 :(得分:3)
使用此正则表达式:
\((S|M|T|W|Th|F|Sa)(,\s*(S|M|T|W|Th|F|Sa))*\)
(S|M|T|W|Th|F|Sa)
与任何工作日相匹配。小心使用圆括号,而不是方括号,因为它们代表字符类(参见Ashwini Chaudhary的评论)
这将匹配,例如:
(M, T, W)
(M)
(T, Sa, Fr)
(T,M,Th)