Python 用于从URL解析uid的正则表达式
我正在尝试从URL解析UID。然而,正则表达式不是我擅长的东西,所以我寻求一些帮助 输入示例:Python 用于从URL解析uid的正则表达式,python,regex,Python,Regex,我正在尝试从URL解析UID。然而,正则表达式不是我擅长的东西,所以我寻求一些帮助 输入示例: https://example.com/d/iazs9fEil/somethingelse?foo=bar 示例输出: iazs9fEil 到目前为止我试过的是 ([/d/]+[\d\x])\w+ 它以某种方式工作,但返回时带有/d/前缀,因此输出为/d/iazs9fEil 如何将正则表达式更改为不包含/d/前缀 编辑: 我尝试过这个正则表达式([^/d/]+[\d\x])\w+,它输出正确的字符串
https://example.com/d/iazs9fEil/somethingelse?foo=bar
示例输出:
iazs9fEil
到目前为止我试过的是
([/d/]+[\d\x])\w+
它以某种方式工作,但返回时带有/d/
前缀,因此输出为/d/iazs9fEil
如何将正则表达式更改为不包含/d/前缀
编辑:
我尝试过这个正则表达式([^/d/]+[\d\x])\w+,它输出正确的字符串,即
iazs9fEil
,但也返回url的其余部分,因此这里是somethingelse?foo=bar
您可以使用一个捕获组:
https?://.*?/d/([^/\s]+)
试试(?简而言之,您可以使用
match = re.search(r'/d/(\w+)', your_string) # Look for a match
if match: # Check if there is a match first
print(match.group(1)) # Now, get Group 1 value
见此和a:
注意
/
不是任何特殊的元字符,请不要在Python字符串模式中转义它
([/d/]+[\d\x])\w+
匹配并捕获到组1中的任何一个或多个斜杠或数字(请参见[/d/]+
,一个正字符类),然后是一个数字或(在这里,Python显示一个错误:sre_contants.error complete escape\x
,它可能会将其解析为x
,但事实并非如此),然后匹配1+个单词字符。您将/d/
放入字符类,它停止匹配字符序列,[/d/]+
以任意顺序和数量匹配斜杠和数字,并肯定将此字符串放入组1
re.search(r'/d/(\w+),s).组(1)
@WiktorStribiżew真棒,正如预期的那样工作,谢谢!它在regexr.com中不起作用,但我想它是python依赖项。在python中工作很好,所以没关系。请随意回答这个问题,如果你愿意,我会接受。你需要使用其他人提到的组。不过,如果你想要的是在第四个正斜杠之后,您可以使用string.split(“/”)[5]我经常发现这比regex更容易做这类事情。@Neil Spliting是我目前的方法,我只是觉得regex更健壮,因为这个url是由第三方应用程序(Grafana)生成的,我不负责更改。我想知道您是否有“不完整的转义\x“在尝试正则表达式时。请不要转义/
,它不是任何特殊的元字符。我认为您不必在开始时检查http
。您认为http://d/1a2b3c4d5
是否有可能输入?@WiktorStribiżew-Ha,这是一个公平的观点。你的答案是正确的,也是最完整的。你投了赞成票。