2

我希望能够用函数抓取字符串的一部分。这是一个例子:

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

4 回答 4

2

您可能想使用标准的 python正则表达式

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

或打印 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')
于 2013-06-18T00:04:33.873 回答
1

它不仅仅是“使用正则表达式”。您正在尝试实际实施正则表达式。好吧,实现正则表达式的最简单方法是使用该re库。当然。

于 2013-06-18T00:08:37.300 回答
0

嗯使用正则表达式?

import re
re.findall("con(.*)tent(.*)more(.*)",my_string)
于 2013-06-18T00:04:18.803 回答
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(.*)")
于 2013-06-18T00:06:17.147 回答