2015-08-22 38 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]