首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析wikipedia {{Location }}模板

解析wikipedia {{Location }}模板
EN

Stack Overflow用户
提问于 2018-03-09 18:47:58
回答 1查看 92关注 0票数 2

我想解析维基百科发电厂列表,其中包含{{Location }}模板。在我的例子中,我使用的是德文翻译,但这不应该改变基本的过程。

如何从这些代码中提取label=、lat=、lon=和region=参数?对于像BeautifulSoup这样的html解析器来说,这可能什么都不是,而是awk?

代码语言:javascript
复制
{{ Positionskarte+
 | Tadschikistan
 | maptype     = relief
 | width       = 600
 | float       = right
 | caption     =
 | places      =
 {{ Positionskarte~
  | Tadschikistan
  | label      = <small>[[Talsperre Baipasa|Baipasa]]</small>
  | marktarget =
  | mark       = Blue pog.svg
  | position   = right
  | lat        = 38.267584
  | long       = 69.123906
  | region     = TJ
  | background = #FEFEE9
 }}
 {{ Positionskarte~
  | Tadschikistan
  | label      = <small>[[Kraftwerk Duschanbe|Duschanbe]]</small>
  | marktarget =
  | mark       = Red pog.svg
  | position   = left
  | lat        = 38.5565
  | long       = 68.776
  | region     = TJ
  | background = #FEFEE9
 }}
...
}}

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-10 08:44:17

只需提取带有正则表达式的信息。例如,像这样(PHP)

代码语言:javascript
复制
$k = "{{ Positionskarte+
 | Tadschikistan
 | maptype     = relief
 | width       = 600
 | float       = right
 | caption     =
 | places      =
 {{ Positionskarte~
  | Tadschikistan
  | label      = <small>[[Talsperre Baipasa|Baipasa]]</small>
  | marktarget =
  | mark       = Blue pog.svg
  | position   = right
  | lat        = 38.267584
  | long       = 69.123906
  | region     = TJ
  | background = #FEFEE9
 }}
 {{ Positionskarte~
  | Tadschikistan
  | label      = <small>[[Kraftwerk Duschanbe|Duschanbe]]</small>
  | marktarget =
  | mark       = Red pog.svg
  | position   = left
  | lat        = 38.5565
  | long       = 68.776
  | region     = TJ
  | background = #FEFEE9
 }}
}}";

$items = explode("Positionskarte~", $k);

$result = [];

foreach ($items as $item) {
    $info = [];
    $pattern1 = '/label\s+=\s+(.+)/';
    preg_match($pattern1, $item, $matches);
    if (!empty($matches)) {
        $info['label'] = $matches[1];       
    }
    $pattern2 = '/lat\s+=\s+(.+)/';
    preg_match($pattern2, $item, $matches);
    if (!empty($matches)) {
        $info['lat'] = $matches[1];     
    }
    $pattern3 = '/long\s+=\s+(.+)/';
    preg_match($pattern3, $item, $matches);
    if (!empty($matches)) {
    $info['long'] = $matches[1];        
    }

    $pattern4 = '/region\s+=\s+(.+)/';
    preg_match($pattern4, $item, $matches);
    if (!empty($matches)) {
        $info['region'] = $matches[1];      
    }

    if(!empty($info)) {
        $result[] = $info;
    }
}

var_dump($result);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49200279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档