2011-02-17 27 views
-1

我已經解析了一個更大的數據集:我遇到了一個問題:關於解析數據集的結果 - (德語)。看一個例子 - 一個小左的東西:在德國的語言,我們有哪些則不能正確識別的特殊字符....看到下面的線 - 出了結果:正則表達式處理特殊字符的細微變化[ä,ö,ü,ß...]

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 

看到一些大膽的修正....

那麼我們如何能夠重寫正則表達式去圓這個問題與特殊字符...?

這裏有任何提示....!?

BTW看到代碼:

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; 
    } 
} 
+0

使用語言環境; $ | = 1; setlocale POSIX :: LC_COLLATE,「de_DE」 – zero 2011-02-17 22:58:27

回答

1

這有什麼好做的正則表達式。問題是你有一個編碼問題。將所有內容標準化爲UTF-8,您將會更加快樂。

爲了好人的緣故,不要使用POSIX語言環境!使用UCA。

0

這個問題並不清楚,因爲除了cleanup()中的替換,我在代碼中看不到任何正則表達式。這是你認爲會給你帶來什麼問題嗎?被損壞的'特殊'德語字符不符合\'s模式,我非常懷疑這是不是罪魁禍首。

您的數據以UTF-8編碼 - 無論是輸入還是輸出。但是輸出文本會用EF BF BD代替各種雙字節字符,即UTF-8用於Unicode U + FFFD或'REPLACEMENT CHARACTER'。只要您以UTF-8格式打開所有文件,一切都會好的。我不相信在你的程序的頭部有一個簡單的use encoding 'UTF8'不會治癒。

+0

非常感謝您的支持和迴應。我會仔細看看代碼! - 我週末晚些時候回來 – zero 2011-02-18 18:19:48

相關問題