日名或前3个字符

时间:2010-06-17 17:00:19

标签: python regex

我希望我的正则表达式能够抓住:

monday mon thursday thu ...

所以可以这样写:

(?P<day>monday|mon|thursday|thu ...

但我想应该有一个更优雅的解决方案。

1 个答案:

答案 0 :(得分:3)

您可以撰写mon(day)?|tue(sday)?|wed(nesday)?

?是“零或一次重复”;所以它有点“可选”。

如果您不需要所有后缀捕获,则可以使用(?:___)非捕获组,因此:

mon(?:day)?|tue(?:sday)?|wed(?:nesday)?

如果您愿意,可以将星期一/星期五/星期日分组:

(?:mon|fri|sun)(?:day)?

我不确定这是否更具可读性。

参考


另一个选项

Java Matcher允许您测试是否存在部分匹配。如果Python也这样做,那么您可以使用它,看看monday|tuesday|....上是否至少(或者可能确切地)匹配3个字符(即所有完整名称)。

以下是一个例子:

import java.util.regex.*;
public class PartialMatch {
   public static void main(String[] args) {
      String[] tests = {
         "sunday", "sundae", "su", "mon", "mondayyyy", "frida"
      };
      Pattern p = Pattern.compile("(?:sun|mon|tues|wednes|thurs|fri|satur)day");
      for (String test : tests) {
         Matcher m = p.matcher(test);
         System.out.printf("%s = %s%n", test, 
            m.matches() ? "Exact match!" :
            m.hitEnd() ? "Partial match of " + test.length():
            "No match!"
         );
      }
   }
}

打印(as seen on ideone.com):

sunday = Exact match!
sundae = No match!
su = Partial match of 2
mon = Partial match of 3
mondayyyy = No match!
frida = Partial match of 5

相关问题