【问题标题】:Extract the last element of multiple urls in a line提取一行中多个url的最后一个元素
【发布时间】:2019-10-22 12:24:49
【问题描述】:

我在以下模板中有非结构化数据:

'<http://www.wikidata.org/entity/Q1> <http://www.wikidata.org/entity/P31c> <http://www.wikidata.org/entity/Q1454986> .',
'<http://www.wikidata.org/entity/Q1> <http://www.wikidata.org/entity/P227c> "4079154-3" .',
'<http://www.wikidata.org/entity/Q1> <http://www.wikidata.org/entity/P373c> "Universe" .'

我想提取每个 url 的最后一个元素,结果应该是这样的:

'Q1 P31c Q1454986', 
'Q1 P227c 4079154-3', 
'Q1 P373c Universe'

我已经尝试了一些示例,包括 thisthis。但是,大多数情况下,它们在一行中只有一个链接。

我还在学习正则表达式,我无法解决上述问题。

【问题讨论】:

  • 为什么要专门使用正则表达式?有更简单的方法来做到这一点
  • ' '.join(re.findall(r'/([^/&gt;]+)&gt;', s))

标签: python regex url


【解决方案1】:

并非总是必须使用正则表达式来获取数据。

代码比使用正则表达式的代码更长,但它更容易理解——因此更容易编写。

data = [
  '<http://www.wikidata.org/entity/Q1> <http://www.wikidata.org/entity/P31c>  <http://www.wikidata.org/entity/Q1454986> .',
  '<http://www.wikidata.org/entity/Q1> <http://www.wikidata.org/entity/P227c> "4079154-3" .',
  '<http://www.wikidata.org/entity/Q1> <http://www.wikidata.org/entity/P373c> "Universe" .'
]

for line in data:  # get lines
    result = []
    for item in line.split()[:3]:        # split line in items and skip last of them
        if item.startswith('<'):         # method for links
            item = item[1:-1]            # skip < >
            item = item.rsplit('/')[-1]  # get last element
        else:                            # method for not links
            item = item[1:-1]            # skip " "
        result.append(item)              # put on list
    print(' '.join(result))              # concatenate in one string

【讨论】:

    【解决方案2】:

    您想要在/&gt; 之间的2 组,以及在两个" 之间的一组

    /([^/>]+)>|\"([^\"]+)\"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-01
      • 2012-04-02
      • 1970-01-01
      • 2017-11-28
      • 2022-01-07
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多