Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
weboman
 Аватар для Schtrich
210 / 195 / 63
Регистрация: 13.08.2010
Сообщений: 1,531
Записей в блоге: 6

Delphi!? Регулярка, парсинг текста

12.07.2011, 14:41. Показов 3007. Ответов 16

Студворк — интернет-сервис помощи студентам
([\d:\d]{5})([^\d]+)
вот эта регулярка выдирает время и название из телепрограммы, но проблема в том, что если в тексте встрачается допустим знак тире "-", то она его урезает, из:

06:10Германия - Казахстан. Отбор к Евро 2012

оно выберит только 06:10 и Германия, остально все отрежит, как этого избежать?

п.с. парсим телепрограмму:

06:00Футбол News
06:10Германия - Казахстан. Отбор к Евро 2012
08:00Футбол News
08:10Шахтер - Оболонь. Чемпионат Украины
10:00Футбол News
10:20Аргентина - Коста-Рика. Копа Америка
12:15Футбольный уик-энд. Сурдоперевод
13:25Футбол: досадно и смешно
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.07.2011, 14:41
Ответы с готовыми решениями:

Нужна регулярка для delphi
из данных вида "mail:pass" получить в 2 две переменные данные "mail" "pass" соответственно

Работа с гуглом (парсинг / регулярка)
Подскажите регулярку для парсинга ссылок с гугла . все спасибо )

Регулярка, извлекающая все ссылки из текста
Всем доброго! Знатоки пожалуйста помогите, решить задачку. Не сильно силен в регулярках, по этому не понимаю, как составить паттерн. ...

16
weboman
 Аватар для Schtrich
210 / 195 / 63
Регистрация: 13.08.2010
Сообщений: 1,531
Записей в блоге: 6
12.07.2011, 15:25  [ТС]
Цитата Сообщение от AlienNation Посмотреть сообщение
([\d:\d]{5})([^\d]+)
вот эта регулярка выдирает время и название из телепрограммы, но проблема в том, что если в тексте встрачается допустим знак тире "-", то она его урезает, из:

06:10Германия - Казахстан. Отбор к Евро 2012

оно выберит только 06:10 и Германия, остально все отрежит, как этого избежать?

п.с. парсим телепрограмму:

06:00Футбол News
06:10Германия - Казахстан. Отбор к Евро 2012
08:00Футбол News
08:10Шахтер - Оболонь. Чемпионат Украины
10:00Футбол News
10:20Аргентина - Коста-Рика. Копа Америка
12:15Футбольный уик-энд. Сурдоперевод
13:25Футбол: досадно и смешно
я думаю так вам будет виднее что происходит:



но сразу же в глаза бросается что после "Германия -" начинается каша.
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
12.07.2011, 23:05
так ты код покаж использования шаблона регулярки

Добавлено через 1 минуту
ты хоть сам смысл этого выражения ([\d:\d]{5})([^\d]+) понимаешь?
или просто скопировал что дали и все? так до бесконечности можно темы создавать.
0
weboman
 Аватар для Schtrich
210 / 195 / 63
Регистрация: 13.08.2010
Сообщений: 1,531
Записей в блоге: 6
12.07.2011, 23:33  [ТС]
Цитата Сообщение от anonimus Посмотреть сообщение
ты хоть сам смысл этого выражения ([\d:\d]{5})([^\d]+) понимаешь?
к сожалению понимаю, поэтому не могу ниче с ним сделать, да, оно будет выбирать все до 1-ой попавшейся цифры, но не могу я сам допереть как ее замкнуть на следующем времени, а не числе 2012, нужен код?, сейчас дам.

Добавлено через 7 минут
но дело ни в коде, дело в самой регулярке:

http://regexr.com?2u785 вот здесь лучше глянь, поймешь, код сюда нету смысла вставлять, разве что саму программу могу скинуть.

Добавлено через 9 минут
Вот если что исходники и программа: , поможете?

Добавлено через 8 минут
да, изв, немного забыл как вложениями пользоваться, я думал только картинки можно вставить.
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
12.07.2011, 23:50
ты регулярку применяешь к строке из мемо или к всему тексту в мемо?
я сейчас попробовал все работает, значит проблема с кодом, выкладывай сюда.
0
weboman
 Аватар для Schtrich
210 / 195 / 63
Регистрация: 13.08.2010
Сообщений: 1,531
Записей в блоге: 6
12.07.2011, 23:56  [ТС]
Цитата Сообщение от anonimus Посмотреть сообщение
ты регулярку применяешь к строке из мемо или к всему тексту в мемо?
я сейчас попробовал все работает, значит проблема с кодом, выкладывай сюда.
я тоже сначала думал что все работает, потом обламался, но это судьба программиста, код в студию:

Delphi
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
unit unLinksGener;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP,RegExpr;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Memo1: TMemo;
    IdHTTP1: TIdHTTP;
    Memo2: TMemo;
    Memo3: TMemo;
    Memo4: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    Button2: TButton;
    Edit2: TEdit;
    Label5: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  mydate:TDateTime;
  strdate:string;
  TVReg:TRegExpr;
  vrema:array of string;
  peredacha: array of string;
  var i,j:integer;
implementation
 
uses StrUtils;
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
TVReg:=TRegExpr.Create;
mydate:=Date;
strdate:=DateToStr(mydate);
strdate:=datetostr(mydate);
Delete(strdate,3,1); Delete(strdate,5,1);
edit1.Text:='http://tv.ukr.net/tv-program/ch/'+strdate+'/id342/pid1/tm/';
memo1.Text:=IdHTTP1.Get(Edit1.Text);
 
 
 for i:=0 to memo3.Lines.Count-1 do
  begin
   TVReg.Expression:=Memo3.Lines.Strings[i];
   memo1.Text:=TVReg.Replace(memo1.Text,'',true);
   memo1.Text:=AnsiReplaceText(memo1.Text,#13,'');
  memo1.Text:=AnsiReplaceText(memo1.Text,#10,'');
  end;
 
 end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
close();
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
 if (edit2.Text<>'') then
  begin
   TVReg.Expression:=Edit2.Text;
   j:=0;
    memo2.Clear; memo4.Clear;
  for i:=0 to memo1.Lines.Count-1 do
   begin
    if TVReg.exec(memo1.lines.Strings[i]) then
    repeat
    memo2.Lines.Add('[ '+intToStr(j)+' ] '+TVReg.Match[1]);
    memo4.Lines.Add('[ '+intToStr(j)+' ] '+TVReg.Match[2]);
    inc(j);
    until not TVReg.ExecNext;
   end;
setLength(vrema,j);
setLength(peredacha,j);
 
 for i:=0 to j-1 do
  begin
   vrema[i]:=Memo2.Lines.Strings[i]+':00';
   peredacha[i]:=Memo4.Lines.Strings[i];
  end;
  end
   else showmessage('Введите регулярное выражение');
 
end;
 
end.
можете почитать пока, а я скрин сделаю чтобы яснее было.
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
13.07.2011, 00:06
ну как я и думал
Delphi
1
if TVReg.exec(memo1.lines.Strings[i]) then
ты зачем это выполняешь регулярное выражение на одной строке? нужно на всем содержимом мемо
вот у тебя и получается 06:10Германия - в одной строке
Казахстан. Отбор к Евро 2012 - в другой
у Tregexpr есть метод ExecNext вот и юзай его
0
weboman
 Аватар для Schtrich
210 / 195 / 63
Регистрация: 13.08.2010
Сообщений: 1,531
Записей в блоге: 6
13.07.2011, 00:12  [ТС]
так мне так и нужно разбить на строки, время в 1-ой должно быть, а название телепередачи во 2-й, только смотри скрин чего я хочу добиться:

что-то я не допру как сюда картинки дополнительно вставлять.
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
13.07.2011, 00:22
ну если ты начал работать с регулярными выражениями, так работай с ними.
Твоя задача выполняется в легкую, и не нужно разбивать по строкам, это вообще не в какие ворота.

Добавлено через 2 минуты
в Match[1] - у тебя время
в Match[2] - название передачи
0
weboman
 Аватар для Schtrich
210 / 195 / 63
Регистрация: 13.08.2010
Сообщений: 1,531
Записей в блоге: 6
13.07.2011, 00:26  [ТС]
Цитата Сообщение от anonimus Посмотреть сообщение
ну если ты начал работать с регулярными выражениями, так работай с ними.
Твоя задача выполняется в легкую, и не нужно разбивать по строкам, это вообще не в какие ворота.

Добавлено через 2 минуты
в Match[1] - у тебя время
в Match[2] - название передачи
да так и должно быть, ты скриншот видел, вообще понимаешь чего я хочу добиться?

п.с.: мне обязательно нужно такое разбиение, просто регулярка косит чуть-чуть, я не могу ее выправить.
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
13.07.2011, 00:35
у тебя 06:10Германия - Казахстан. Отбор к на одной строке
а Евро 2012 - в другой вот так и выходит. Как написал так и работает. Ты так внятно и не объяснил зачем разбитие по строкам? то что ты хочешь сделать и без разбитие будет работать

Добавлено через 4 минуты
и сделай пробел тут Отбор к Евро 201208:00Футбол News
между концом одной зиписи и началом другой, или дай изначальный html код с тегами.
а иначе не выйдет отделить 201208
0
weboman
 Аватар для Schtrich
210 / 195 / 63
Регистрация: 13.08.2010
Сообщений: 1,531
Записей в блоге: 6
13.07.2011, 00:41  [ТС]
Цитата Сообщение от anonimus Посмотреть сообщение
у тебя 06:10Германия - Казахстан. Отбор к на одной строке
а Евро 2012 - в другой вот так и выходит. Как написал так и работает. Ты так внятно и не объяснил зачем разбитие по строкам? то что ты хочешь сделать и без разбитие будет работать
в какой другой Евро 2012??? нету вообще его, я незнаю как еще объяснить может через TeamViewer?

Добавлено через 1 минуту
наконецто, я уже думал все безнадежно, вы хотяли бы поняли суть вопроса, уже хорошо.

Добавлено через 4 минуты
а изначальный код (исходник с тегами) можно посмотреть прямо с сайта: http://tv.ukr.net/tv-program/c... 342/tmall/
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
13.07.2011, 00:41
ну ты на скрин то свой посмотри
Миниатюры
Delphi!? Регулярка, парсинг текста  
0
weboman
 Аватар для Schtrich
210 / 195 / 63
Регистрация: 13.08.2010
Сообщений: 1,531
Записей в блоге: 6
13.07.2011, 00:41  [ТС]
а изначальный код (исходник с тегами) можно посмотреть прямо с сайта: http://tv.ukr.net/tv-program/c... 342/tmall/
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
13.07.2011, 00:44
Цитата Сообщение от AlienNation Посмотреть сообщение
вы хотяли бы поняли суть вопроса
да я то понял, ты не поймешь никак, что регулярное выражение нужно применять на весь текст а не на строку иначе так и будет у тебя косячить твой код

Добавлено через 1 минуту
а изначальный код (исходник с тегами) можно посмотреть прямо с сайта: http://tv.ukr.net/tv-program/c... 342/tmall/
ну эт другое дело, завтра накидаю тебе пример, счас спать.
0
weboman
 Аватар для Schtrich
210 / 195 / 63
Регистрация: 13.08.2010
Сообщений: 1,531
Записей в блоге: 6
13.07.2011, 00:46  [ТС]
ок, спс за сочувствие
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
13.07.2011, 10:58
делов на 2 минуты
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button1Click(Sender: TObject);
var html:string;
reg:Tregexpr;
begin
 html:=IdHTTP1.Get('http://tv.ukr.net/tv-program/ch/12072011/id342/tmall/');
 reg:=Tregexpr.Create;
 reg.Expression:='(class=''time''>)([^<]+)(.{20,35})(none-active-item)[''\s>]{3}([^<]+)';
 if reg.Exec(html) then
 repeat
   memo1.Lines.Add(reg.Match[2]); //время
   memo2.Lines.Add(reg.Match[5]); //название передачи
 until not reg.ExecNext;
 
 reg.Free;
end;
P.S.
зря ты теги по удалял а потом начал парсить, проще парсить исходный html код
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.07.2011, 10:58
Помогаю со студенческими работами здесь

Регулярка для получения текста из JSON
как составить регулярное выражения чтобы получить asdfghj_25166456 где asdfghj_ постоянно а 25166456 при каждом запросе меняется ...

Регулярка для очистки ячейки от лишнего текста
Ребят, всем привет! В общем вопрос такой, у меня есть столбец, в котором в ячейку помимо названия выводится пятизначный артикул... Есть ли...

Парсинг текста
{&quot;access_token&quot;:&quot;91b81e63e14a5814ac45c7987a37d7561e29e0c178b7f89c33431514642759a65fa784c291632f0781956&quot;,&quot;expires_in&quot;:0,&quot;user_id&quot;:285490918}...

Парсинг текста
Добрый день! Нужна помощь. Как из текстового файла записать по поиску имени(последний столбец) в переменную $id - первое число в...

Парсинг текста
Всем привет , есть задача написать парсер логинов &quot;InstallConfigStore&quot; { &quot;ZIP&quot; { &quot;Path&quot; { &quot;All&quot; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru