Python Regex中的模式匹配

时间:2014-01-24 16:07:03

标签: python regex

例如,我对变量日的输入可以是星期一或星期一,星期二或星期一,..,星期五,我正在尝试在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)怎么办?我应该怎样做才能处理这些输入?有没有解决方案所以它不会冗长?

2 个答案:

答案 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)