Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2014, 14:41   #1
Son
Пользователь
 
Аватар для Son
 
Регистрация: 24.11.2008
Сообщений: 76
По умолчанию Lazarus. RegExpr. Кириллица. Результаты странные выдает.

Здравствуйте. В Lazarus (может в этом проблема) пишу парсер. Есть текст:

Цитата:
name="ОЭС Урала"
name="ОЭС Средней Волги"
name="ОЭС Юга"
name="ОЭС Северо-Запада"
name="ОЭС Центра"
name="ОЭС Сибири"
Если к нему применяю выражение :

Цитата:
name="[А-яЁё\s]+
то получаю такой результат:

Цитата:
name="ОЭС У
name="ОЭС С
name="ОЭС Юга
name="ОЭС Севе
name="ОЭС Цен
name="ОЭС Сиби
Подскажите пожалуйста где я мог ошибиться?
Лучше сдохнуть, чем жить с иглой в яйце (Кащей Бессмертный)
Son вне форума Ответить с цитированием
Старый 15.11.2014, 15:10   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

О-о. У regexpr лазаруса проблемы с кириллической "р"? Всегда в досовском фоксе мучался с сортировкой из за неё. А как дела с "Н"?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 15.11.2014 в 15:12.
Аватар вне форума Ответить с цитированием
Старый 15.11.2014, 15:14   #3
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Код:
procedure RegExprName(AData: string);
var
  RegExpr: TRegExpr;
begin
  RegExpr := TRegExpr.Create;
  try
    RegExpr.Expression := 'name="(.*?)"';

    if RegExpr.Exec(AData) then
      repeat
        ShowMessage(RegExpr.Match[1]);
      until not RegExpr.ExecNext;

  finally
    RegExpr.Free;
  end;
end;
В AData ваш текст.

UPD. Советую посмотреть по Unicode

Последний раз редактировалось Lardes; 15.11.2014 в 15:20.
Lardes вне форума Ответить с цитированием
Старый 15.11.2014, 15:17   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А код можешь показать?

P.S. Хы. Все порешали?

Цитата:
У regexpr лазаруса проблемы с кириллической "р"?
Тогда почему: name="ОЭС Цен а не name="ОЭС Цент
?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.11.2014, 15:23   #5
Son
Пользователь
 
Аватар для Son
 
Регистрация: 24.11.2008
Сообщений: 76
По умолчанию

Цитата:
Сообщение от Lardes Посмотреть сообщение
Код:
procedure RegExprName(AData: string);
var
  RegExpr: TRegExpr;
begin
  RegExpr := TRegExpr.Create;
  try
    RegExpr.Expression := 'name="(.*?)"';

    if RegExpr.Exec(AData) then
      repeat
        ShowMessage(RegExpr.Match[1]);
      until not RegExpr.ExecNext;

  finally
    RegExpr.Free;
  end;
end;
В AData ваш текст.

UPD. Советую посмотреть по Unicode
Это помогло немного, но хотелось разобраться с кириллицей(. Тем более в том xml который парсю есть другие элементы в name=""
Лучше сдохнуть, чем жить с иглой в яйце (Кащей Бессмертный)
Son вне форума Ответить с цитированием
Старый 15.11.2014, 15:29   #6
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Пройдите по ссылке и внимательно прочитайте. Lazarus сам по себе юникодный, и если вы пытаетесь сунуть ему текст системной кодировки (у винды кодировка не UTF8) покажутся "крякозябры". Нужно этот текст преобразовать в UTF8.

Код:
uses
  FileUtil;

function SysToUTF8(const s: string): string;
Lardes вне форума Ответить с цитированием
Старый 15.11.2014, 15:52   #7
Son
Пользователь
 
Аватар для Son
 
Регистрация: 24.11.2008
Сообщений: 76
По умолчанию

Цитата:
Сообщение от Lardes Посмотреть сообщение
Пройдите по ссылке и внимательно прочитайте. Lazarus сам по себе юникодный, и если вы пытаетесь сунуть ему текст системной кодировки (у винды кодировка не UTF8) покажутся "крякозябры". Нужно этот текст преобразовать в UTF8.

Код:
uses
  FileUtil;

function SysToUTF8(const s: string): string;
Перевел RegExpr в режим Unicode, теперь выдает ошибку. Преобразования не помогают, т.к. и без преобразований RegExpr выдает почти нужный результат (за исключением некоторых букв).
Лучше сдохнуть, чем жить с иглой в яйце (Кащей Бессмертный)
Son вне форума Ответить с цитированием
Старый 15.11.2014, 15:54   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нужно этот текст преобразовать в UTF8.
С чего бы это? Причем тут регулярка?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.11.2014, 16:25   #9
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Stilet, посмотри "list_ansi.txt" в ANSI, "list_utf8.txt" в UTF8
Вложения
Тип файла: zip RegExprLaz.zip (124.4 Кб, 21 просмотров)
Lardes вне форума Ответить с цитированием
Старый 15.11.2014, 17:10   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ты не понял )
Я говорю о том что регулярка работает и с ANSI. Т.е. не нужно строки переводить никуда. Другое дело что вывод на экран этого может потребовать, но для парсинга это не нужно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
delphi xe 6 regexpr Fahman Общие вопросы Delphi 6 20.08.2014 17:31
Проблема с регуляркой RegExpr FleXik Общие вопросы Delphi 7 17.11.2013 17:22
Перекомпиляция программы(простой) Win Lazarus в Linux Lazarus Toxifer Фриланс 0 27.11.2012 22:46
Здравствуйте, установил LAzarus, при нажатии на кнопку запуск, выдает эти ошибки Mr.Kenny Помощь студентам 0 14.06.2012 17:30
Странные результаты рисования линии tumanovalex C# (си шарп) 6 10.05.2011 19:48