在Python中匹配模式中的子字符串

时间:2015-08-22 17:05:15

标签: python regex string pattern-matching

我想在这个字符串模式中获取子字符串s2

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

s1,s2,s3是任何字符串(可变长度)和逗号,空格和括号是那些特定的字符。 我想知道:有没有pythonic,简单的方法使用正则表达式匹配或类似方法吗?

3 个答案:

答案 0 :(得分:1)

您可以通过ast

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

通过分裂。

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

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

答案 1 :(得分: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阅读器所需的文件类型对象。

答案 2 :(得分: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]