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的观点,他的解决方案更适合这个任务
.?
.*?