powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / RegExp + множественная замена
5 сообщений из 5, страница 1 из 1
RegExp + множественная замена
    #35434486
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть даты в таком или другом формате

Код: plaintext
1.
2.
3.
 13  Jun  2007 
 19  Feb  2004 
 11  Mar  2003 
мне нужно получить их в таком формате через RegExp

Код: plaintext
1.
2.
3.
 2007 - 01 - 13 
 2004 - 02 - 19 
 2003 - 03 - 11 

если стоят вместо названий месяцев цифры то это просто заменить
а как если названия месяцев (в длинной или короткой форме) как заменить на цифры

можно ли так сделать через RegExp
...
Рейтинг: 0 / 0
RegExp + множественная замена
    #35434806
Фотография %?*?%
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, есть функция Format...
...
Рейтинг: 0 / 0
RegExp + множественная замена
    #35435129
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил, на каждый твой пост про регулярные выражения мне хочется процитировать старую-старую фразу: Some people, when confronted with a problem, think “I know, I'll use regular expressions.” Now they have two problems.
9 из 10 твоих задач намного проще решаются БЕЗ регулярных выражений.

Но если сильно хочешь, можешь сделать что-то вроде такого:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
dim re, str( 3 ), i, m, sm
dim mon, monthnames( 12 )
set re = new RegExp
re.Pattern = "(\d\d?)\s(\w\w\w)\s(\d{4})"
str( 1 ) = "13 Jun 2007"
str( 2 ) = "19 Feb 2004"
str( 3 ) = "11 Mar 2003"

monthnames( 1 ) = "Jan"
monthnames( 2 ) = "Feb"
monthnames( 3 ) = "Mar"
monthnames( 4 ) = "Apr"
monthnames( 5 ) = "May"
monthnames( 6 ) = "Jun"
monthnames( 7 ) = "Jul"


for i= 1  to  3 
	Set m = re.Execute(str(i))
	if m is nothing then
		wscript.echo "Not recognized as valid input: " & str(i)
	else
		set sm = m( 0 ).SubMatches
		mon =  0 
		do while sm( 1 ) <> monthnames(mon)
			mon = mon +  1 
		loop
		wscript.echo sm( 2 ) & "-" & right("0" & mon,  2 ) & "-" & sm( 0 )
	end if
next
...
Рейтинг: 0 / 0
RegExp + множественная замена
    #35435165
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и чтобы уж не быть совсем голословным - решение задачи без регулярок:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
dim str( 3 ), i, d
str( 1 ) = "13 Jun 2007"
str( 2 ) = "19 Feb 2004"
str( 3 ) = "11 Mar 2003"

for i= 1  to  3 
    if not isdate(str(i)) then
		wscript.echo "Not recognized as valid input: " & str(i)
	else
		d = cdate(str(i))
		wscript.echo year(d) & "-" & right("0" & month(d),  2 ) & "-" & right("0" & day(d),  2 )
	end if
next
А если чуть-чуть подумать, то ее можно будет еще сильнее сократить.
А если ты пишешь на VB а на на VBS, то и функций по форматированию дат будет намного больше доступно.
...
Рейтинг: 0 / 0
RegExp + множественная замена
    #35435701
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем за решения
в принципе сделал и через RegExp + VB6

мне RegExp нужен чтобы не производить каждый раз замену кода в программе при внесении нового формата даты и чтобы было быстро

у меня из разных помоек собираются данные
и форматы дат могут быть разными
пока набралось порядка 15

Код: plaintext
MON JUN  10   23 : 00 : 00  GTM  2008 
например фунция isDate() не возьмёт но это дата
то что я сделал для каждого формата даты сохраняю шаблон замены

я привожу к виду для которого уже есть готовая функция преобразования по месяцам в короткой и длинной форме

тоже не самое удачное решение но всё таки
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / RegExp + множественная замена
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]