簡體   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