Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式上的微小更改,以处理特殊字符[ä;,ö;,ü;,ß;…]_Regex_Perl_Unicode_Special Characters - Fatal编程技术网

Regex 正则表达式上的微小更改,以处理特殊字符[ä;,ö;,ü;,ß;…]

Regex 正则表达式上的微小更改,以处理特殊字符[ä;,ö;,ü;,ß;…],regex,perl,unicode,special-characters,Regex,Perl,Unicode,Special Characters,我已经解析了一个更大的数据集:我遇到了一个问题:解析数据集的结果(德语)。请看一个例子——只剩下一点:在德语中,我们有一些无法正确识别的特殊字符。。。。请参见以下几行-结果外: 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 9

我已经解析了一个更大的数据集:我遇到了一个问题:解析数据集的结果(德语)。请看一个例子——只剩下一点:在德语中,我们有一些无法正确识别的特殊字符。。。。请参见以下几行-结果外:

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;
   }
}
子进程数据(){
while($range parse_file('processing.html');
我的($table)=$te->tables;
对于我的$row($table->rows){
清理(@$行);
打印输出文件“@$row\n”;
}
$| = 1;  
打印“已处理记录$范围到$计数器”;
打印“\r”;
$counter=$counter+50;
$range=$range+50;
$te=HTML::TableExtract->new;
}
}
次级清理(){
对于(@){
s/\s+//g;
}
}

这与正则表达式无关。问题是您有编码问题。将所有内容规范化为UTF-8,您会更快乐


看在上帝的份上,不要使用POSIX语言环境!使用UCA。

这个问题不清楚,因为除了cleanup()中的替换之外,我在代码中没有看到正则表达式.您认为这就是问题的根源吗?正在被破坏的“特殊”德语字符与a\s模式不匹配,我非常怀疑这是否是罪魁祸首


您的数据在输入和输出时都是用UTF-8编码的。但是输出文本用EF BF BD替换了各种双字节字符,EF BF BD是UTF-8,代表Unicode U+FFFD或“替换字符”。只要您以UTF-8的形式打开所有文件,一切都应该正常。我不相信有多少简单的
在文件开头使用编码“UTF8”
如果你的程序无法治愈。

使用locale;$|=1;setlocale POSIX::LC_COLLATE,“de_de”非常感谢你给出的伟大且支持性的答案。我将仔细查看代码!-我周末晚些时候回来