我如何从regex python中获取字符串

时间:2017-05-14 18:58:25

标签: python regex

我对正则表达式不熟悉,有人可以帮助我这个例子吗? 我有一个来自python API调用的json输出,json看起来像这样:

{
  "key": "/my/task/ca4e0240d6ce447554f805e118928",
  "key2": "values"
}

在这种情况下,如何使用re查找ca4e0240d6ce447554f805e118928

提前致谢!

3 个答案:

答案 0 :(得分:2)

你不需要正则表达式,你需要basename来提取路径分离字符串的最右边部分:

import os

d = {
  "key": "/my/task/ca4e0240d6ce447554f805e118928",
  "key2": "values"
}

print(os.path.basename(d["key"]))

结果:

ca4e0240d6ce447554f805e118928

(请注意,它也适用于Windows,即使标准路径分隔符为\

使用str.rpartition替代方式(仍然没有正则表达式):

print(d["key"].rpartition("/")[2])

正则表达式:在斜线斜线(贪婪)之前删除所有内容:

print(re.sub(".*/","",d["key"]))

答案 1 :(得分:0)

您还可以使用str.split()获得所需的输出,如下例所示:

a = {
  "key": "/my/task/ca4e0240d6ce447554f805e118928",
  "key2": "values"
}

print(a["key"].split("/")[-1])

或者,如果您的输出同时具有'/'和/或'\',则可以使用这样的lambda函数:

get_string = lambda x: x["key"].split("/")[-1] if '/' in x["key"] else x["key"].split("\\")[-1]

print(get_string(a))

两者都会输出:

'ca4e0240d6ce447554f805e118928'

答案 2 :(得分:0)

如果你坚持使用正则表达式,你可以这样做,它适用于/\,但这完全没必要,你应该使用os.path模块:< / p>

import re
d = {
  "key": "/my/task/ca4e0240d6ce447554f805e118928",
  "key2": "values"
}
match = re.search(r"[/|\\](\w+)$", d["key"]).groups()[0]
print(match)