繁体   English   中英

Python正则表达式在两个子字符串之间获取字符串

[英]Python Regex Get String Between Two Substrings

首先,我知道这似乎是一个重复的问题,但是,我找不到解决问题的方法。

我有一个如下所示的字符串:

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] ,但我仍然希望避免使用匹配[2:-4]

如果字符串只包含一个实例,请改用re.search()

>>> import re
>>> s = "api('randomkey123xyz987', 'key', 'text')"
>>> match = re.search(r"api\('([^']*)'", s).group(1)
>>> print match
randomkey123xyz987

你想要的字符串(,你正赶上括号之间的一切:

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:])

你应该使用以下正则表达式:

api\('(.*?)'

假设api(是固定的前缀

它匹配api(然后捕获接下来出现的内容,直到'令牌。

>>> re.findall(r"api\('(.*?)'", "api('randomkey123xyz987', 'key', 'text')")
['randomkey123xyz987']

如果您确定randomkey123xyz987将始终位于“api('”和“',”之间,则使用split()方法可以在一行中完成。这样您就不必使用正则表达式匹配。它将匹配起始和结束分隔符之间的模式是“api('”和“',”。

>>> string = "api('randomkey123xyz987', 'key', 'text')"
>>> value = (string.split("api('")[1]).split("',")[0]
>>> print value
randomkey123xyz987

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM