在python中查找特定的字符串部分

时间:2013-06-17 23:54:17

标签: python string indexing

我希望能够通过函数获取字符串的各个部分。这是一个例子:

def get_sec(s1,s2,first='{',last='}'):
    start = s2.index(first)
    end = -(len(s2) - s2.index(last)) + 1
    a = "".join(s2.split(first + last))
    b = s1[:start] + s1[end:]
    print a
    print b
    if a == b:
        return s1[start:end] 
    else:
        print "The strings did not match up"
string = 'contentonemore'
finder = 'content{}more'
print get_sec(string,finder)
#'one'

因此该示例有效...我的问题是我需要多个部分,而不仅仅是一部分。所以我的函数需要能够适用于任何数量的部分,例如:

test_str = 'contwotentonemorethree'
test_find = 'con{}tent{}more{}'
print get_sec(test_str,test_find)
#['one','two','three']

关于如何使该功能适用​​于任意数量的替换的任何想法?

4 个答案:

答案 0 :(得分:2)

您可能想要使用标准的python regex

import re
a = re.search('con(.*)tent(.*)more(.*)','contwotentonemorethree')
print a.groups()
# ('two', 'one', 'three')

或     print re.findall('con(。)tent(。)more(。*)','contwotentonemorethree')     #[('two','one','three')]

修改
你可以使用

转义字符串中的特殊字符
re.escape(str)

示例:

part1 = re.escape('con(')
part2 = re.escape('(tent')
print re.findall(part1 + '(.*)' + part2,'con(two)tent')

答案 1 :(得分:1)

这不只是“使用正则表达式”。您正试图实际实施正则表达式。好吧,实现正则表达式的最简单方法是使用re库。当然。

答案 2 :(得分:0)

嗯使用正则表达式?

import re
re.findall("con(.*)tent(.*)more(.*)",my_string)

答案 3 :(得分:0)

看起来你想要一些正则表达式。

这是关于正则表达式的python页面:http://docs.python.org/2/library/re.html

例如,如果你知道该字符串只会被分成“con”“tent”“more”

import re
regex = re.compile(r"(con).*(tent).*(more).*")

s = 'conxxxxtentxxxxxmore'

match = regex.match(s)

然后找到匹配的索引:

index1 = s.index(match.group(1))
index2 = s.index(match.group(2))
index3 = s.index(match.group(3))

或者,如果您想查找其他字符(。*)的位置:

regex = re.compile(r"con(.*)tent(.*)more(.*)")