Части соответствия любой даты где угодно в строке с помощью regex

Этому, вероятно, ответили на десятки времен, не мог найти ответ хотя...

Так или иначе работая в среде 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?).* (matcher ожидает, что выражение соответствует всей строке). Относившийся строка "10/4/97 00:08 di" возвращенное соответствие "0/4/97" (возможно, matcher не является самым большим никогда созданный...). regex мог представить в виде строки так или иначе быть измененным, чтобы гарантировать, что matcher возвращает всю дату? (Благодаря SilentGhost для редактирования).

1
задан Max Leske 30 July 2010 в 08:29
поделиться

1 ответ

Кажется, вы пытаетесь сопоставить слишком много элементов. Если дата - это единственное, что вас интересует, почему бы не использовать следующее:

(\d{,2}/\d{,2}/)(\d{2,4})

Обратите внимание, что теоретически он будет соответствовать и трехзначному году. Я предполагаю, что на практике у вас не будет такого ввода.

2
ответ дан 2 September 2019 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: