2015-04-17 2 views
4

Во-первых, я знаю, это может кажется как дублирующийся вопрос, однако я не мог найти никакого рабочего решения для моей проблемы.Python Regex Get String между двумя подстроками

У меня есть строка, которая выглядит следующим образом:

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

Мне нужно извлечь randomkey123xyz987, который всегда будет между апи (' и ',

Я планировал использование Regex для этого, однако, у меня, кажется, есть некоторые проблемы.

Это единственный прогресс, который я сделал составили:

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

Следующий код возвращает 'randomkey123xyz987', 'ключ', 'текст'

Я пытался использовать [^ '], но я думаю, что я неправильно вставив его в функцию re.findall.

Все, что я пытаюсь, терпит неудачу.


Update: Мой текущий обходной путь использует [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 всегда будет между "апи (" и «», затем с помощью split() может сделать это в одной строке. Таким образом, вам не нужно будет использовать соответствие регулярному выражению. Оно будет соответствовать шаблону между начальным и конечным разделителем, который является «api (« »и« », ».

>>> string = "api('randomkey123xyz987', 'key', 'text')" 
>>> value = (string.split("api('")[1]).split("',")[0] 
>>> print value 
randomkey123xyz987 
Смежные вопросы