我希望能够通过函数获取字符串的各个部分。这是一个例子:
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']
关于如何使该功能适用于任意数量的替换的任何想法?
答案 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(.*)")