2015-08-22 58 views
0

我想獲得的子S2在此字符串模式匹配子串在Python

('s1', 's2', 's3', 's4') 

與S1,S2,S3是任意字符串(可變長度)和逗號,坯件和括號是那些特定的字符。 我想知道:是否有pythonic,使用正則表達式匹配或類似的簡單方法?

+0

'ast.literal_eval(S)[1]' –

+0

是單引號's1','s2',...逃脫? –

回答

1

如下可以使用正則表達式:

import re 

print re.findall("'(\w+)'", "('s1', 's2', 's3', 's4')") 

給你所有的條目列表如下:

['s1', 's2', 's3', 's4'] 

所以對於s2:

print re.findall("'(\w+)'", "('s1', 's2', 's3', 's4')")[1] 

作爲另一替代,Python的csv模塊可以使用其中涉及相當好與各種引用場景:

import csv, StringIO 

text = "('s1', 's2', 's3', 's4')" 
print next(csv.reader(StringIO.StringIO(text.strip("()")), skipinitialspace=True, quotechar="'"))[1] 

該第一轉換的文本到被使用CSV讀者需要一個文件類型的對象。

0

您可以通過ast

import ast 
h = "('s1', 's2', 's3', 's4')" 
print ast.literal_eval(h)[1] 

得到答案通過分裂。

print h.split(', ')[1] 

print h.split("', '")[1] 
1

直截了當地帶和拆分一起。

s="""('s1', 's2', 's3', 's4')""" 
print s.split()[1].strip("',") 

但正則表達式是更乾淨:

import re 
s="""('s1', 's2', 's3', 's4')""" 
print re.findall("\w\d",s)[1]