Regex-字符串和第一次出现之间的Python匹配

Regex-字符串和第一次出现之间的Python匹配,python,regex,Python,Regex,无论我读了多少文档,我都很难掌握正则表达式。我正在尝试匹配字符串和第一次出现的&之间的所有内容这就是我所拥有的 link = "group.do?sys_id=69adb887157e450051e85118b6ff533c&&" rex = re.compile("group\.do\?sys_id=(.?)&") sysid = rex.search(link).groups()[0] 我用它来帮助我验证我的正则表达式,我可以让rex=re.compile

无论我读了多少文档,我都很难掌握正则表达式。我正在尝试匹配字符串和第一次出现的
&
之间的所有内容这就是我所拥有的

link =  "group.do?sys_id=69adb887157e450051e85118b6ff533c&&"
rex = re.compile("group\.do\?sys_id=(.?)&")
sysid = rex.search(link).groups()[0]
我用它来帮助我验证我的正则表达式,我可以让
rex=re.compile(“user\u group.do?sys\u id=(*)&”)
工作,但是
*
是贪婪的,与最后一个匹配&我希望与第一个匹配
&


我认为
匹配0到1次

这里不一定需要正则表达式。改用:

如果将导入更改为:

from urllib.parse import urlparse, parse_qs

您可以简单地将regex输出到
&
而不是最后的
&
,如下所示:

import re
link =  "user_group.do?sys_id=69adb887157e450051e85118b6ff533c&&"
rex = re.compile("user_group\.do\?sys_id=(.*)&&")
sysid = rex.search(link).groups()[0]

print(sysid)
贪心但是

.*? 
不应在正则表达式中

.? 
将只查找任何字符0-1次,而

.*? 

将查找最早的匹配事件。我希望这能解释清楚。

你的链接没有用户组,只是组
re.compile(“用户组\.do\?sys\u id=(.*?&)”,re.S)
很抱歉这是一个输入错误我在这里讲了太多了,我不知道那是url的一部分。接得好!那么urlparse比regex更受欢迎吗?@briemissh一般来说,url可能相当复杂,严格来说,用正则表达式解析或验证它可能与正则表达式一样困难。换句话说,正则表达式是一种过于通用的工具,无法应用于URL解析
urlparse
就是专门为此而设计的。我同意@alecxe的观点,他的解决方案更适合这个任务
.? 
.*?