第一个字符出现后的Python正则表达式匹配组

2024-04-29 14:35:38 发布

您现在位置:Python中文网/ 问答频道 /正文

第一次使用Python正则表达式,我只需要一些关于匹配字符串的技巧。你知道吗

我有这样一个网址:url = "https://www.youtube.com/api/timedtext?xorp=True&xoaf=1&v=UloIw7dhnlQ&signature=C2AF3C2887A37043353A86AAAACFA796659B56CB.E736B7146447843F2D3311234744DC0D9937AF7B&asr_langs=fr%2Cru%2Ces%2Cnl%2Cit%2Cde%2Cko%2Cen%2Cpt%2Cja&sparams=asr_langs%2Ccaps%2Cv%2Cxoaf%2Cxorp%2Cexpire&expire=1541769991&key=yttt1hl=&encaps=asrlang=enfmt=srv3"

除了以expire=1541769991(从第二行到最后一行)开头的部分之外,我正在尝试匹配所有内容。这就是我想到的:

matchObj = re.match( r'(.*)expire=(.*)&(.*?)', url)

问题是第三组包含上次出现&之后的文本。我想要在&之后第一次出现expire=之后的文本。我试着在&之后添加一个?,使它也不贪婪。我该怎么做呢?你知道吗


Tags: 字符串https文本comapitrueurl技巧
2条回答

试试这个正则表达式

matchObj = re.match( r"(.*)expire=[^&]*(&.*)", url)

你可以这样做:

import re

url = "https://www.youtube.com/api/timedtext?xorp=True&xoaf=1&v=UloIw7dhnlQ&signature=C2AF3C2887A37043353A86AAAACFA796659B56CB.E736B7146447843F2D3311234744DC0D9937AF7B&asr_langs=fr%2Cru%2Ces%2Cnl%2Cit%2Cde%2Cko%2Cen%2Cpt%2Cja&sparams=asr_langs%2Ccaps%2Cv%2Cxoaf%2Cxorp%2Cexpire&expire=1541769991&key=yttt1hl=&encaps=asrlang=enfmt=srv3"

match = re.match("(.+?)(expire=.+?&)(.+$)", url)
print(match.group(1) + match.group(3))

输出

https://www.youtube.com/api/timedtext?xorp=True&xoaf=1&v=UloIw7dhnlQ&signature=C2AF3C2887A37043353A86AAAACFA796659B56CB.E736B7146447843F2D3311234744DC0D9937AF7B&asr_langs=fr%2Cru%2Ces%2Cnl%2Cit%2Cde%2Cko%2Cen%2Cpt%2Cja&sparams=asr_langs%2Ccaps%2Cv%2Cxoaf%2Cxorp%2Cexpire&key=yttt1hl=&encaps=asrlang=enfmt=srv3

或者,如果您只是想要不带expire=的文本,您可以删除它:

result = re.sub("expire=\d+?&", "", url)

注意,假设expire的值都是数字。你知道吗

相关问题 更多 >