第一个字符出现后的Python Regex匹配组

时间:2018-11-09 23:40:34

标签: python regex

第一次使用Python Regex,我只需要一些有关匹配字符串的技巧。

我有这样的网址: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=第一次出现之后的文本。我尝试在?之后添加&,以使其也不再贪婪。我将如何去做呢?

2 个答案:

答案 0 :(得分:2)

尝试此正则表达式,

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

答案 1 :(得分:1)

您可以执行以下操作:

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的值是全数字。