簡體   English   中英

從鏈接中提取關鍵字

[英]Extract keywords from links

我正在嘗試提取鏈接中的前2數字,如下所示:

https://primer.text.com/sdfg/8406758680-345386743-DSS1-S%20Jasd%12Odsfr%12Iwetds-Osdgf/ 
https://primer.text.com/sdfg/8945879094-849328844-DPE-S%20Jsdfe%12OIert-Isdfu/
https://primer.text.com/sdfg/8493093053-292494834-QW23%23Wsdfg%23Iprf%64Uiojn%32Asdfg-Werts/

output 應該是這樣的:

id1 = ['8406758680', '8945879094','8493093053']
id2 = ['345386743', '849328844', '292494834']

我正在嘗試使用re模塊來執行此操作。

請告訴我該怎么做。

這是我到目前為止的代碼片段:

def GetUrlClassId(UrlInPut):
    ClassID = ''
    for i in UrlInPut:
        if i.isdigit():
            ClassID+=i
        elif ClassID !='':
            return int(ClassID)
    return ""

def GetUrlInstanceID(UrlInPut):
    InstanceId = ''
    ClassID = 0
    for i in UrlInPut:
        if i.isdigit() and ClassID==1:
            InstanceId+=i
        elif InstanceId !='':
            return int(InstanceId)
        if i == '-':
            ClassID+=1
    return ""

我不想使用這樣的東西。 我想使用正則表達式。

使用 Regex,您可以在基數 URL 上進行文字匹配,然后使用\d+捕獲兩組多位數字( \d匹配 0-9, +至少匹配前一組)。 re.findall返回匹配組的列表。

import re
l1 = "https://primer.text.com/sdfg/8406758680-345386743-DSS1-S%20Jasd%12Odsfr%12Iwetds-Osdgf/"
l2 = "https://primer.text.com/sdfg/8945879094-849328844-DPE-S%20Jsdfe%12OIert-Isdfu/"
l3 = "https://primer.text.com/sdfg/8493093053-292494834-QW23%23Wsdfg%23Iprf%64Uiojn%32Asdfg-Werts/"

for l in [l1, l2, l3]:
  result = re.findall(r'https://primer.text.com/sdfg/(\d+)-(\d+)', l)
  print(result)

Output:

[('8406758680', '345386743')]
[('8945879094', '849328844')]
[('8493093053', '292494834')]

從這里開始,重新格式化為您想要的數據結構應該足夠簡單(使用zip或其他東西)。

正則表達式模式: /(\d{10})-(\d{9})需要方括號來標識數字組, {}指定重復的確切出現, doc

# urls separated by a white space
urls = 'https://primer.text.com/sdfg/8406758680-345386743-DSS1-S%20Jasd%12Odsfr%12Iwetds-Osdgf/ https://primer.text.com/sdfg/8945879094-849328844-DPE-S%20Jsdfe%12OIert-Isdfu/ https://primer.text.com/sdfg/8493093053-292494834-QW23%23Wsdfg%23Iprf%64Uiojn%32Asdfg-Werts/'

urls = urls.split() # as list

import re

ids = [re.search(r'/(\d{10})-(\d{9})', url).groups() for url in urls]
print(list(zip(*ids)))

Output

[('8406758680', '8945879094', '8493093053'), ('345386743', '849328844', '292494834')]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM