这应该是一件简单的事情,但我无法让它发挥作用。
说我有这个字符串。
I want this string to be splitted into smaller strings.
而且,好吧,我想将它拆分成更小的字符串,但只取T和S之间的内容。
所以,结果应该产生
this, to be s, to s, trings
到目前为止,我已尝试拆分每一个S,然后是每个T(向后)。但是,它只会获得第一个“这个”,并停止。如何让它继续并获得T和S之间的所有东西?
(在此程序中,我将结果导出到另一个文本文件)
matches = open('string.txt', 'r')
with open ('test.txt', 'a') as file:
for line in matches:
test = line.split("S")
file.write(test[0].split("T")[-1] + "\n")
matches.close()
也许使用正则表达式会更好,虽然我不知道如何使用它们太好了?
答案 0 :(得分:3)
您想要re.findall()
来电:
re.findall(r't[^s]*s', line, flags=re.I)
演示:
>>> import re
>>> sample = 'I want this string to be splitted into smaller strings.'
>>> re.findall(r't[^s]*s', sample, flags=re.I)
['t this', 'tring to be s', 'tted into s', 'trings']
请注意,这与't this'
和'tted into s'
匹配;当t
时,您的规则需要澄清为什么那些首先'trings'
个字符不匹配。
听起来,好像您只想匹配t
和s
之间的文字而不包含任何其他t
:
>>> re.findall(r't[^ts]*s', sample, flags=re.I)
['this', 'to be s', 'to s', 'trings']
第二个结果中的tring
和第三个结果中的tted in
不包含在内,因为这些结果中有t
个。{/ p>