RegEx для сопоставления различных дат - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь составить оператор регулярного выражения для сопоставления в каждом из приведенных ниже форматов даты.

* Mar 7, 2017
Mar. 7, 2017
* March 7, 2017
3-7-2017
03-07-2017
3-7-17
03-07-17
* 03/7/2017
* 03/07/17
* 3/7/17
Mar-07-2017
Mar-7-2017
March-07-2017

Приведенное ниже регулярное выражение сопоставляется в форматах даты, обозначенных звездочкой выше.Я тщетно пытался добавить к тому, что у меня уже есть, но безуспешно.

([0-9] +) / ([0-9] +) / ([0-9] +) | ([12] \ d {3} - (0 [1]-9] | 1 [0-2]) - (0 [1-9] | [12] \ д | 3 [01])) | \ W + \ s \ d {2}, \ s \ d {4}(? я) | \ б (: Ян (?:? uary) | Февраль (: ruary) | Mar (???? ч) | Апрель (?:? иль) | май | Июнь (? е)? | июль (? у) |? август (: усть?) | сентябрь? (? тябрь) |? октябрь (?: обер) |? ноябрь (?: уголек) |? декабрь] (?: уголек)?) \ b (?: 0? [1-9] | [1-2] [0-9] | 3 [01]) ,?\ d {4}

Любая помощь всегда приветствуется!

* Бонусный вопрос *

В некоторых случаях может быть несколькодата соответствует, и мне нужно, чтобы найти соответствие после определенного слова.В прошлом я использовал приведенный ниже синтаксис, заключая выражение regex в круглые скобки после точки.

(?<=Word).(StatementHere)

1 Ответ

2 голосов
/ 30 мая 2019

Попробуйте тогда ...

([0-9]+)/([0-9]+)/([0-9]+)|((0?[1-9]|1[0-2])-(0?[1-9]|[12]\d|3[01])-(\d{4}|\d{2}))|\w+\s\d{2},\s\d{4}|(?i)\b(Jan(?:uary|\.)?|Feb(?:ruary|\.)?|Mar(?:ch|\.)?|Apr(?:il|\.)?|May|Jun(?:e|\.)?|Jul(?:y|\.)?|Aug(?:ust|\.)?|Sep(?:tember|\.)?|Oct(?:ober|\.)?|Nov(?:ember|\.)?|Dec(?:ember|\.)?)([ ](?:0?[1-9]|[1-2][0-9]|3[01]),?[ ]|-(?:0?[1-9]|[1-2][0-9]|3[01])-)(\d{4})

https://regex101.com/r/k1vaVN/1

Версия для чтения

    ( [0-9]+ )                    # (1)
    /
    ( [0-9]+ )                    # (2)
    /
    ( [0-9]+ )                    # (3)
 |  
    (                             # (4 start)
         ( 0? [1-9] | 1 [0-2] )        # (5)
         -
         ( 0? [1-9] | [12] \d | 3 [01] )  # (6)
         -
         ( \d{4} | \d{2} )             # (7)
    )                             # (4 end)
 |  
    \w+ \s \d{2} , \s \d{4} 
 |  
    (?i)
    \b 
    (                             # (8 start)
         Jan
         (?: uary | \. )?
      |  Feb
         (?: ruary | \. )?
      |  Mar
         (?: ch | \. )?
      |  Apr
         (?: il | \. )?
      |  May
      |  Jun
         (?: e | \. )?
      |  Jul
         (?: y | \. )?
      |  Aug
         (?: ust | \. )?
      |  Sep
         (?: tember | \. )?
      |  Oct
         (?: ober | \. )?
      |  Nov
         (?: ember | \. )?
      |  Dec
         (?: ember | \. )?
    )                             # (8 end)
    (                             # (9 start)
         [ ] 
         (?: 0? [1-9] | [1-2] [0-9] | 3 [01] )
         ,? [ ] 
      |  -
         (?: 0? [1-9] | [1-2] [0-9] | 3 [01] )
         -
    )                             # (9 end)
    ( \d{4} )                     # (10)

update
Просто оберните даты в группу (?: ), затем добавьте любой квалификатор перед
, который вам нужен.

word[ ]or[ ]phrase[ ]+\K(?:([0-9]+)/([0-9]+)/([0-9]+)|((0?[1-9]|1[0-2])-(0?[1-9]|[12]\d|3[01])-(\d{4}|\d{2}))|\w+\s\d{2},\s\d{4}|(?i)\b(Jan(?:uary|\.)?|Feb(?:ruary|\.)?|Mar(?:ch|\.)?|Apr(?:il|\.)?|May|Jun(?:e|\.)?|Jul(?:y|\.)?|Aug(?:ust|\.)?|Sep(?:tember|\.)?|Oct(?:ober|\.)?|Nov(?:ember|\.)?|Dec(?:ember|\.)?)([ ](?:0?[1-9]|[1-2][0-9]|3[01]),?[ ]|-(?:0?[1-9]|[1-2][0-9]|3[01])-)(\d{4}))
...