незначительные изменения в регулярном выражении для работы со специальными символами [ä, ö, ü, ß ...] - PullRequest
0 голосов
/ 18 февраля 2011

Я проанализировал больший набор данных: и я столкнулся с проблемой: по результатам проанализированного набора данных - (немецкий язык). Посмотрите пример - с одной небольшой вещью: в немецком языке у нас есть специальные символы, которые не распознаются правильно .... смотрите следующие строки - из результата:

lfd. Nr. Schul- nummer Schulname Stra�e PLZ Ort Telefon Fax Schulart Webseite
1 0401 M�dchenrealschule Marienburg,�Abenberg, der Di�zese Eichst�tt Marienburg 1 91183� Abenberg�  09178/509210  Realschulen  mrs-marienburg.homepage.t-online.de 
2 6581 Volksschule Abenberg�(Grundschule) G�ss�belstr. 2 91183� Abenberg�  09178/215 09178/905060 Volksschulen  home.t-online.de/home/vs-abenberg 
3 6913 Mittelschule Abenberg� G�ss�belstr. 2 91183� Abenberg�  09178/215 09178/905060 Volksschulen  home.t-online.de/home/vs-abenberg 
4 0402 Johann-Turmair-Realschule�Staatliche Realschule Abensberg Stadionstra�e 46 93326� Abensberg�  09443/9143-0,12,13 09443/914330 Realschulen  www.rs-abensberg.de 
5 3041 Cabrini-Schule Offenstetten, Priv. F�rderzentrum�F�rderschwerp. geist.Entwickl. d. Kath.Jugendf�rs. Am Schmiedweiher 8 93326� Abensberg�Offenstetten 09443/9188-3 09443/918855 Volksschulen zur sonderp�dog. F�rderung  www.cabrinischule.de 
6 3074 Private Berufsschule zur sonderp�d. F�rderung,�F�rderschwerpunkt Lernen, Abensberg Regensburger Stra�e 60 93326� Abensberg�  09443/709191 09443/709193 Berufsschulen zur sonderp�dog. F�rderung  www.berufsschule-abensberg.de 

в следующих строках я добавляю правильные символы, некоторые исправления выделены жирным шрифтом!

lfd. Nr. Schul- nummer Schulname **Straße** PLZ Ort Telefon Fax Schulart Webseite
1 0401 **Mädchenrealschule** Marienburg, Abenberg, der **Diözese** Eichstätt Marienburg 1 91183 Abenberg  09178/509210  Realschulen  mrs-marienburg.homepage.t-online.de 
2 6581 Volksschule Abenberg (Grundschule) **Güssübelstr**. 2 91183 Abenberg 

см. Некоторые исправления, выделенные жирным шрифтом ....

Хорошо, как мы можем переписать регулярное выражение, чтобы обойти проблему со специальными символами ...?

любой намек на это здесь ....!?

кстати см. Код:

sub processData() {
   while ( $range <= $total_records) {
      getstore("$url_to_process$suchbegriffe&a=$treffer&s=$range", 'processing.html') or die 'Unable to get page';
      $te->parse_file('processing.html');
      my ($table) = $te->tables;
      for my $row ( $table->rows ) {
         cleanup(@$row);
         print OUTFILE "@$row\n";
      }
      $| = 1;  
      print "Processed records $range to $counter";
      print "\r";
      $counter = $counter + 50;
      $range = $range + 50;
      $te = HTML::TableExtract->new;
   }
}

sub cleanup() {
   for ( @_ ) {
      s/\s+/ /g;
   }
}

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

Это не имеет ничего общего с регулярными выражениями.Проблема в том, что у вас проблема с кодировкой.Нормируйте все до UTF-8, и вы будете намного счастливее.

И ради бога, не используйте локали POSIX!Используйте УКА.

0 голосов
/ 18 февраля 2011

Вопрос не ясен, потому что я не вижу регулярных выражений в вашем коде, кроме подстановки в cleanup ().Это то, что, как вы считаете, вызывает у вас проблемы?Поврежденные «специальные» немецкие символы не будут соответствовать шаблону \ s, и я очень сомневаюсь, что это виновник.

Ваши данные кодируются в UTF-8 - как на входе, так и на выходе.Но выходной текст заменяет различные двухбайтовые символы на EF BF BD, который является UTF-8 для Unicode U + FFFD или «REPLACEMENT CHARACTER».Пока вы открываете все файлы как UTF-8, все должно быть хорошо.Я не верю, что простое use encoding 'UTF8' во главе вашей программы не излечит.

...