2015-03-19 6 views
0

Я новичок в python и пытаюсь извлечь подстроки между одинарными кавычками. Вы знаете, как это сделать с регулярным выражением?Извлечение подстрок между одинарными кавычками

EG вход

text = "[(u'apple',), (u'banana',)]" 

Я хочу, чтобы извлечь яблоко и банан в качестве элементов списка, как ['apple', 'banana']

+2

Зачем вы хотите это сделать? Это пахнет проблемой [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – Kevin

+0

Упреждающее примечание потенциальным ответчикам: если вы даете решение с использованием регулярного выражения, убедитесь, что оно работает с такими сложными строками, как '' [(эта строка содержит «скрытую метку кавычки и \\ сбежавшую косую черту») ] "' – Kevin

+1

Вы можете попробовать не жадное регулярное выражение ''. *? '', Но это не работает с условиями, о которых говорил Кевин. Однако он отлично работает с введенным вами образцом ввода –

ответ

2
text = "[(u'apple',), (u'banana',)]" 

print(re.findall(r"\(u'(.*?)',\)", text) 
['apple', 'banana'] 

text = "[(u'this string contains\' an escaped quote mark and\\ an escaped slash',)]" 
print(re.findall(r"\(u'(.*?)',\)", text)[0]) 
this string contains' an escaped quote mark and \ an escaped slash 
1

в качестве альтернативы Вы можете использовать ast.literal_eval затем извлечь первый пункт по списку понимания:

from ast import literal_eval 

text = "[(u'apple',), (u'banana',)]" 

literal_eval(text) 
Out[3]: [(u'apple',), (u'banana',)] 

[t[0] for t in literal_eval(text)] 
Out[4]: [u'apple', u'banana'] 
Смежные вопросы