首先,我知道这可能似乎就像一个重复的问题,但是,我找不到解决问题的方法。
我的字符串如下所示:
string = "api('randomkey123xyz987', 'key', 'text')"
我需要提取 randomkey123xyz987 ,它始终位于 api(' 和',
之间我计划使用正则表达式,但是,我似乎遇到了一些麻烦。
这是我取得的唯一进展:
import re
string = "api('randomkey123xyz987', 'key', 'text')"
match = re.findall("\((.*?)\)", string)[0]
print match
以下代码返回' randomkey123xyz987',' key',' text'
我尝试使用 [^'] ,但我的猜测是我没有正确地将其插入到re.findall函数中。
我正在尝试的一切都失败了。
更新:我当前的解决方法是使用 [2:-4] ,但我仍然希望避免使用 match [2:-4] 。
答案 0 :(得分:3)
如果字符串只包含一个实例,请改用re.search()
:
>>> import re
>>> s = "api('randomkey123xyz987', 'key', 'text')"
>>> match = re.search(r"api\('([^']*)'", s).group(1)
>>> print match
randomkey123xyz987
答案 1 :(得分:1)
你想要(
和,
之间的字符串,你正在抓住parens之间的所有内容:
match = re.findall("api\((.*?),", string)
print match
["'randomkey123xyz987'"]
或''
:
match = re.findall("api\('(.*?)'", string)
print match
['randomkey123xyz987']
如果您的字符串实际上看起来如此,您可以拆分:
string = "api('randomkey123xyz987', 'key', 'text')"
print(string.split(",",1)[0][4:])
答案 2 :(得分:0)
您应该使用以下正则表达式:
api\('(.*?)'
假设api(
是固定前缀
匹配api(
,然后捕获下一个显示的内容,直到'
令牌。
>>> re.findall(r"api\('(.*?)'", "api('randomkey123xyz987', 'key', 'text')")
['randomkey123xyz987']
答案 3 :(得分:0)
如果您确定randomkey123xyz987将始终位于“api('”和“',”之间,那么使用split()方法可以在一行中完成。这样您就不必使用正则表达式匹配。它将匹配起始和结束分隔符之间的模式,即“api('”和“', ”
>>> string = "api('randomkey123xyz987', 'key', 'text')"
>>> value = (string.split("api('")[1]).split("',")[0]
>>> print value
randomkey123xyz987