Есть ли более эффективный способ создания строки REGEX для дат - PullRequest
0 голосов
/ 08 ноября 2019

Я ищу более эффективное регулярное выражение для проекта QT.

Дата Строки, которым соответствует следующее регулярное выражение:

8 June 2009
2009-06-08
1/31/1971
ca. 1971
circa 1971
about 1971
abt 1971
before 1971
bef 1971
bante 1971
after 1971
aft 1971
apost 1971
between 1970 and 2000
bet 1970 and 2000
btw 1970 and 2000
1970-2000
from 1970 to 2000
est 2000
2000 or 2001
2000 | 2001
2019
1.10.2019
June 2009
6/2019

Выражение:

^((?:Jan|January|Feb|February|Mar|March|Apr|April|May|May|Jun|June|Jul|July|Aug|August|Sep|September|Oct|October|Nov|November|Dec|December)[\t ]+[0-9]{4})|^((?:3[01]|[12][0-9]|0?[1-9])[\t ]+(?:Jan|January|Feb|February|Mar|March|Apr|April|May|May|Jun|June|Jul|July|Aug|August|Sep|September|Oct|October|Nov|November|Dec|December)[\t ]+[0-9]{4})|^([0-9]{4} or [0-9]{4})|(^(?:1[0-2]|0?[1-9])[\/.-][0-9]{4})|(^[0-9]{4}-[0-9]{4})|(^from[\t ]+[0-9]{4}[\t ]+to[\t ]+[0-9]{4})|(^btw[\t ]+[0-9]{4}[\t ]+and[\t ]+[0-9]{4})|(^between[\t ]+[0-9]{4}[\t ]+and[\t ]+[0-9]{4})|(^[\t\n\v\f\r ]*([0-9]{4})$)|(^[0-9]{4}[\t ]+\|[\t ]+[0-9]{4}\b)|(^(?:1[0-2]|0?[1-9])[\/.-](?:3[01]|[12][0-9]|0?[1-9])[\/.-][0-9]{4})|(^est[\t ]+[0-9]{4})|(^after[\t ]+[0-9]{4})|(^before[\t ]+[0-9]{4})|(^bef[\t ]+[0-9]{4})|(^abt[\t ]+[0-9]{4})|(^about[\t ]+[0-9]{4})|(^circa[\t ]+[0-9]{4})|(^ca[^\n\r][\t ]+[0-9]{4})|(^bante[\t ]+[0-9]{4})|(^aft[\t ]+[0-9]{4})|(^apost[\t ]+[0-9]{4})|(^btw[\t ]+[0-9]{4}[\t ]+and[\t ]+[0-9]{4})|(^bet[\t ]+[0-9]{4}[\t ]+and[\t ]+[0-9]{4})|(^[0-9]{4}-(?:1[0-2]|0?[1-9])-(?:3[01]|[12][0-9]|0?[1-9]))

Проверено полученное совпадение https://rubular.com/r/boBqo3h0KBt7oA Rubular Rebex

Единственное решение, которое я могу найти, выполняется с чередующимися группами. Является ли это разумным подходом для сопоставления со списком строковых дат?

Заранее спасибо!

1 Ответ

0 голосов
/ 08 ноября 2019

Я обязуюсь использовать RegEx в том виде, в каком он был опубликован, и целевым RegEx в качестве дополнительной проверки, если это необходимо. Спасибо за ваши комментарии.

...