На это, вероятно, отвечали десятки раз, но не смог найти ответ ...
В любом случае, работая в среде Smalltalk, у меня есть строка, состоящая из трех частей, подобных этой: "ttm 4/6/97 00:08"
.Строка является очень переменной, что означает, что некоторая часть может отсутствовать (поэтому это будет строка, состоящая из менее чем трех частей, таких как "ttm 4/6/97"
), и порядок может быть другим ("00:08 ttm 4/6/97"
).Также в дате могут отсутствовать цифры ("04/6/1997"
, "4/06/97"
и т. Д.).К счастью, пробелы в качестве разделителей являются постоянными плюс, нет пробелов в начале и в конце.
Мне нужно найти дату в строке и сопоставить две части, например: (4/6/)(97)
.До сих пор у меня был успех для определенных комбинаций только с чем-то вроде этого:
^\S*\s?(\d\d?/\d\d?/)(\d\d\d?\d?)\s?\S*
Может ли кто-нибудь указать мне правильное направление?
Редактировать: чтобы упростить задачу, я попыталсячтобы получить совпадение для всей даты, используя следующее выражение: ^.*(\d\d?/\d\d?/\d\d\d?\d?).*
(средство сопоставления ожидает, что выражение соответствует всей строке).Применительно к строке "10/4/97 00:08 di"
возвращаемое совпадение равно "0/4/97"
(возможно, сопоставление не является самым лучшим из когда-либо созданных ...).Может ли строка регулярного выражения каким-либо образом изменяться, чтобы гарантировать, что сопоставитель возвращает всю дату?(Спасибо SilentGhost за редактирование).