从链接中提取关键字
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/
输出应该是这样的:
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 ""
我不想使用这样的东西。我想使用正则表达式。
使用正则表达式,您可以在基数 URL 上进行文字匹配,然后使用 \d+
捕获两组多位数字(\d
匹配 0-9,+
匹配至少一个前面的组)。 re.findall
returns 匹配组列表。
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)
输出:
[('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)))
输出
[('8406758680', '8945879094', '8493093053'), ('345386743', '849328844', '292494834')]
我正在尝试提取链接中的前 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/
输出应该是这样的:
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 ""
我不想使用这样的东西。我想使用正则表达式。
使用正则表达式,您可以在基数 URL 上进行文字匹配,然后使用 \d+
捕获两组多位数字(\d
匹配 0-9,+
匹配至少一个前面的组)。 re.findall
returns 匹配组列表。
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)
输出:
[('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)))
输出
[('8406758680', '8945879094', '8493093053'), ('345386743', '849328844', '292494834')]