繁体   English   中英

Python正则表达式中的模式匹配

[英]Pattern matching in 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)怎么办? 我应该如何处理我的模式以处理此类输入? 有什么解决方案,所以不会冗长吗?

没有正则表达式的答案是:

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个字符)的字符开始,到倒数第二个字符结束。 实际上,它除去了括号。

使用此正则表达式:

\((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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM