2015-04-17 119 views
4

首先,我知道這可能似乎例如重複的問題,但是,我找不到任何工作解決我的問題。Python的正則表達式獲取字符串兩個子串之間

我有字符串,如下所示:

string = "api('randomkey123xyz987', 'key', 'text')" 

我需要提取randomkey123xyz987這將永遠是API之間( '',

我打算使用正則表達式這一點,但是,我似乎遇到了一些麻煩。

這是唯一的進步是我取得:

import re 
string = "api('randomkey123xyz987', 'key', 'text')" 
match = re.findall("\((.*?)\)", string)[0] 
print match 

下面的代碼返回'randomkey123xyz987', '鍵',

我曾嘗試使用 '文本' [^'],但我的猜測是,我沒有正確地將它插入到re.findall函數中。我試圖

一切都是失敗的。


更新:我目前的解決方法是使用[2:-4],但我還是想盡量避免使用匹配[2:-4]

回答

3

如果字符串只包含一個實例,使用re.search()代替:

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

你想要(,之間的字符串,正趕上括號之間的一切:''之間的匹配

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

您應該使用正則表達式如下:

api\('(.*?)' 

假設api(是固定的前綴

它匹配api(,然後捕獲接下來會出現,直到'令牌。

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

如果您確信randomkey123xyz987總是會之間的「API(「」和「」,」,然後使用split()方法可以得到它在同一行完成的。這樣你就不必使用正則表達式匹配,這將匹配的開始和結束分隔符是「API(「」和「」, 」的格局。

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