Название дня или первые 3 символа - PullRequest
3 голосов
/ 17 июня 2010

Я хочу, чтобы мое регулярное выражение перехватывало:

monday mon thursday thu ...

Так что можно написать что-то вроде этого:

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

Но я думаю, что должно быть более элегантное решение.

1 Ответ

3 голосов
/ 17 июня 2010

Вы можете написать mon(day)?|tue(sday)?|wed(nesday)? и т. Д.

? - это «повторение ноль или единица»;так что это своего рода «опционально».

Если вам не нужны все захваты суффиксов, вы можете использовать (?:___) группы без захвата, поэтому:

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

Вы можете группировать понедельник / пятницу / воскресенье вместе, если хотите:

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

Хотя я не уверен, что это более читабельно.

Ссылки


Другой вариант

Java Matcher позволяет вам проверить, есть ли частичное совпадение.Если Python делает то же самое, то вы можете использовать это и посмотреть, совпадают ли хотя бы (или, возможно, точно) 3 символа с monday|tuesday|.... (то есть со всеми полными именами).

Вот пример:

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!"
         );
      }
   }
}

Это печатает ( как видно на 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

Смежные вопросы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...