在Python中的某些字符之后删除字符串的一部分

时间:2016-10-17 15:38:04

标签: python string

Python新手。

我想删除以下字符串中单词AND和逗号字符之间的子串:

MyString = ' x.ABC AND XYZ, \ny.DEF AND Type, \nSome Long String AND Qwerty, \nz.GHI AND Tree \n'

结果应为:

MyString = ' x.ABC,\ny.DEF,\nSome Long String,\nz.GHI\n'

我想在不使用正则表达式的情况下这样做。

我尝试了各种方法,分割,连接和索引都无济于事。

任何方向赞赏。

感谢。

3 个答案:

答案 0 :(得分:1)

您可以将字符串拆分为行,然后将行拆分为单词,并使用itertools.takewhile删除AND之后的所有单词(包括其自身):

from itertools import takewhile

''.join(' '.join(takewhile(lambda x: x != 'AND', line.split())) + ',\n' 
                                      for line in MyString.splitlines())

请注意,在使用str.join重建每一行后,手动添加换行符和逗号。

然后使用str.join最终加入所有行。

答案 1 :(得分:1)

虽然摩西的回答非常好,但我有一种有趣的感觉,这是一个家庭作业问题,意味着你不要使用任何进口。无论如何这里是一个没有进口的答案,它不像其他答案那样有效,如摩西或正则表达,但它的效果不如其他答案。

MyString = 'x.ABC AND XYZ, \ny.DEF AND Type, \nSome Long String AND Qwerty, \nz.GHI AND Tree \n'
new_string = ''
for each in [[y for y in x.split(' AND ')][0] for x in MyString.split('\n')]:
    new_string+=each
    new_string+='\n'

print(new_string)

答案 2 :(得分:0)

现在它正在运作..并且可能避免附加'关键字让它变得非常快......

In [19]: ',\n'.join([x.split('AND')[0].strip() for x in MyString.split('\n')])


Out[19]: 'x.ABC,\ny.DEF,\nSome Long String,\nz.GHI,\n'

您可以查看此答案以了解原因......

Comparing list comprehensions and explicit loops (3 array generators faster than 1 for loop)