Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / RegExp + множественная замена / 5 сообщений из 5, страница 1 из 1
16.07.2008, 16:52
    #35434486
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RegExp + множественная замена
есть даты в таком или другом формате

Код: 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
16.07.2008, 17:53
    #35434806
%?*?%
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RegExp + множественная замена
Вообще-то, есть функция Format...
...
Рейтинг: 0 / 0
16.07.2008, 20:30
    #35435129
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RegExp + множественная замена
Михаил, на каждый твой пост про регулярные выражения мне хочется процитировать старую-старую фразу: 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
16.07.2008, 21:12
    #35435165
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RegExp + множественная замена
Ну и чтобы уж не быть совсем голословным - решение задачи без регулярок:
Код: 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
17.07.2008, 10:00
    #35435701
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RegExp + множественная замена
Спасибо всем за решения
в принципе сделал и через RegExp + VB6

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

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

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

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

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


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