我有一个问题,我需要帮助修复。我正在尝试创建一个脚本来抓取网站的邮件地址。主要是德语地址,但我不确定如何创建所述脚本,我已经创建了一个已经从所述网站中提取电子邮件地址的地址。但地址之一令人费解,因为没有真正的格式..这里有几个德国地址,可以提供这些数据。
Ilona Mustermann
Hauptstr. 76
27852 Musterheim
Andreas Mustermann
Schwarzwaldhochstraße 1
27812 Musterhausen
D. Mustermann
Kaiser-Wilhelm-Str.3
27852 Mustach
这些只是我想从网站中提取的几个例子。这可能与PHP有关吗?
编辑:
这是我到目前为止所拥有的
function extract_address($str) {
$str = strip_tags($str);
$Name = null;
$zcC = null;
$Street = null;
foreach(preg_split('/([^A-Za-z0-9üß\-\@\.\(\) .])+/', $str) as $token) {
if(preg_match('/([A-Za-z\.])+ ([A-Za-z\.])+/', $token)){
$Name = $token;
}
if(preg_match('/ /', $token)){
$Street = $token;
}
if(preg_match('/[0-9]{5} [A-Za-zü]+/', $token)){
$zcC = $token;
}
if(isset($Name) && isset($zcC) && isset($Street)){
echo($Name."<br />".$Street."<br />".$zcC."<br /><br />");
$Name = null;
$Street = null;
$zcC = null;
}
}
}
它可以检索$ Name(IE:Ilona Mustermann和City / zipcode(27852 Musterheim),但不确定正则表达式总能找回街道吗?
这是我到目前为止所提出的,它似乎在街道上大约有60%的时间工作,拉链/城市工作100%,名称也是如此。但是,当它试图偶尔提取街道时它就会失败..有什么想法吗?
function extract_address($str) {
$str = strip_tags($str);
$Name = null;
$zcC = null;
$Street = null;
foreach(preg_split('/([^A-Za-z0-9üß\-\@\.\(\)\& .])+/', $str) as $token) {
if(preg_match('/([A-Za-z\&.])+ ([A-Za-z.])+/', $token) && !preg_match('/([A-Za-zß])+ ([0-9])+/', $token)){
//echo("N:$token<br />");
$Name = $token;
}
if(preg_match('/(\.)+/', $token) || preg_match('/(ß)+/', $token) || preg_match('/([A-Za-zß\.])+ ([0-9])+/', $token)){
$Street = $token;
}
if(preg_match('/([0-9]){5} [A-Za-züß]+/', $token)){
$zcC = $token;
}
/*echo("<br />
N:$Name
<br />
S:$Street
<br />
Z:$zcC
<br />
");*/
if(isset($Name) && isset($zcC) && isset($Street)){
echo($Name."<br />".$Street."<br />".$zcC."<br /><br />");
$Name = null;
$Street = null;
$zcC = null;
}
}
}
答案 0 :(得分:1)
当然你可能需要使用preg_match()函数。这是关于制作一个好的正则表达式模式。
例如获取后置代码
<?php
$str = "YOUR ADRESSES STRING HERE";
preg_match('/([0-9]+) ([A-Za-z]+)/', $str, $matches);
print_r($matches);
?>
这个正则表达式与你给出的地址相匹配,你需要将它放入你的原生角色。
[A-Za-züß.]+ [A-Za-z.üß]+\s[A-Za-z. 0-9ß-]+\s[0-9]+ [A-Za-züß.]+
答案 1 :(得分:1)
使用如此复杂的字符串的正则表达式无法获得可靠的答案。这是这个问题的唯一正确答案。
答案 2 :(得分:0)
Vlad Bondarenko是对的。
在CS中说:邮政地址不构成常规语言。
提取信息是一个活跃的研究课题。正则表达式并非完全是假的,但与使用词典(“地名词典”)或更先进的机器学习算法的方法相比,失败率更高。
好的堆栈溢出q / a是How to parse freeform street/postal address out of text, and into components