【问题标题】:Removing parts of a string after certain chars in Python在Python中的某些字符之后删除部分字符串
【发布时间】:2017-02-26 16:16:55
【问题描述】:

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'

我想不使用正则表达式。

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

任何方向表示赞赏。

谢谢。

【问题讨论】:

  • 为什么没有正则表达式?正则表达式就是为此而生的。
  • 带正则表达式:re.sub('(AND \w+),?', '', MyString)

标签: python string


【解决方案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)

【讨论】:

  • 如果任何行包含像BLAND 这样的词出现在AND 之前,则会失败
  • @MosesKoledoye 哦,对了,忘了在“与”中加空格。谢谢。
【解决方案2】:

您可以将字符串拆分为行,然后将行进一步拆分为单词并使用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 连接起来。

【讨论】:

    【解决方案3】:

    现在它正在工作......并且可能避免使用'append'关键字使其非常快......

    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)

    【讨论】:

    • 如果一行包含BLAND 之类的单词出现在AND 之前,则会失败
    猜你喜欢
    • 2020-11-23
    • 2020-06-17
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多