![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
составить Pattern(RegExp)
dmitry1991 © (2009-06-22 16:58:00)задача в следующем:
имеется список строк вида:
'Палатка туристическая Nova Tour Тайга 4 км N' '' '1636' '0'
'Палатка туристическая Nova Tour Тайга 4 N' '' '1636' '0'
'Ракетка теннисная' '' '2015' '0'
'Шахматы пластиковые на магнитах' '' '1991' '0'
'Шахматы 25x25 дерево' '' '1991' '0'
'Шахматы 25x25 пластиковые на магнитах' '' '1991' '0'
Необходимо извлечь 4 составляющие строки, значения в одинарных кавычках (значения разделены между собой символом табуляции).Помогите составить корректное условие поиска (Pattern).
Медвежонок Пятачок (2009-06-22 17:32:00) [1]SplitRegExpr(#9,MyString,MyStringList);
dmitry1991 (2009-06-22 17:29:00) [2]
> Юрий Зотов © (22.06.09 17:17) [5]
> > Palladin © (22.06.09 17:12) [4]Мне тоже кажется, что
> привлечение регвыражений для такой простенькой задачки -
> это стрельба из пушки по воробьям.
Так-то оно так... но в моем случае препод требует сделать именно с использованием RegExp. Уже несколько часов пытаюсь составить выражение - ничего не выходит.
Palladin (2009-06-22 17:23:00) [3]Мне тоже, причем очень сильно, отсюда и пример без использования тяжелой артиллерии )
А так же, в случае использования Делфи ниже 2009, рекомендую аффтору использовать следующую функцию:
Function vtPos(Const SS,S:String;p_nFrom:Integer=1):Integer;
Var
nSLen,nSSLen,i,c:Integer;
Begin
Result:=0;
nSSLen:=Length(ss);
nSLen:=Length(s);
If (nSSLen=0) or (nSLen=0) or (p_nFrom=0) Then Exit;
If p_nFrom>0 Then
Begin
c:=1;
For i:=p_nFrom to nSLen Do
If s[i]=ss[c] Then
Begin
Inc(c);
If c=nSSLen+1 Then
Begin
Result:=i-c+2;
Break;
End;
End Else c:=1;
End Else
Begin
p_nFrom:=nSLen+p_nFrom+1;
c:=nSSLen;
For i:=p_nFrom Downto 1 Do
If s[i]=ss[c] Then
Begin
Dec(c);
If c=0 Then
Begin
Result:=i;
Break;
End;
End Else c:=nSSLen;
End;
End;
Palladin (2009-06-22 17:23:00) [4]вместо шататной функции PosEx из D7
Юрий Зотов (2009-06-22 17:17:00) [5]> Palladin © (22.06.09 17:12) [4]
Мне тоже кажется, что привлечение регвыражений для такой простенькой задачки - это стрельба из пушки по воробьям.
Palladin (2009-06-22 17:12:00) [6]
Var
ss:TStringList;
n,m:Integer;
ss:=TStringList.Create;
Try
n:=Pos(#9,s); m:=1;
While n<>0 Do
Begin
ss.Add(Copy(s,m,n-1); m:=n+1;
n:=PosEx(#9,s,m);
End;
ss.Add(Copy(s,m,Length(s));
Finally
ss.Free;
End;
Медвежонок Пятачок (2009-06-22 17:08:00) [7]Меnод Split.
Аргументами входная строка, шаблон-разделитель (табуляция), и экземпляр списка куда все это засовывать
dmitry1991 (2009-06-22 17:05:00) [8]можете набросать пример, впервые сталкиваюсь с regexp
Медвежонок Пятачок (2009-06-22 17:00:00) [9]засплиттить всю строку целиком в список по символу табуляции и все