第一次使用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=
第一次出现之后的文本。我尝试在?
之后添加&
,以使其也不再贪婪。我将如何去做呢?
答案 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的值是全数字。