使用正则表达式从python中的列表项中删除子字符串
Posted
技术标签:
【中文标题】使用正则表达式从python中的列表项中删除子字符串【英文标题】:Using regex to remove substrings from list items in python 【发布时间】:2014-06-25 15:50:36 【问题描述】:我确定这一定是一个重复的问题,但我在任何地方都找不到答案。我有一个包含多个字符串的列表,如下所示:
['>ctg7180000016561_3757\nAAAAATTTAGTTAAAACTATAACATTAGCTTGTCAAGCTAAAATTACTATGTAAGTAGTAATTTTTA\n', '>ctg7180000016561_3824\nATCCCTCAAATAGCACCCATTAACTGATTATCCTTATTCTTAATATTCACCACCTCTCTCCTAATATTTAGAGCTTCTAACTATTTCTTTATCATGTACCCCCCCAAAAAATCTGTTTTTTATAAAAAAACTAGTATAAATAACTGATCATGATAACTAACCTCTTTTCGTCTTTCGACCCCTCTACTAACTTAAATACTAACTTTAACTGAGTTAGGACTATCCTCGGGGTGGCTGTAATCCCGAGGATATTTTGGATTATCCCCTCGCGTTTCTCCCTGCTTTGAATAAAACTTATCAGTACTCTTCACAAAGAATTCAAAGTCCTTGTTAACAACAAAAAATCCCAAGGCAGAACCCTAATCCTGATTTCCTTATTTTCTATTATTTTATTTAATAACTTCATAGGACTATTCCCATATATTTTCACATCCACAAGTCACATAGTATTAACCCTGTCCCTGGCTCTCCCCATATGACTAAGATTTATATTGTATGGGTGGGTAAATAATACAACCCACATGCTAGCCCATCTAGTACCCCAAGGAACCCCTGCCGTTCTAATACCATTTATGGTGTGTATTGAAACAATCAGAAATGTTATCCGACCCGGCACCCTGGCAATCCGGCTATCCGCAAATATAATTGCAGGACACCTACTAATAACCCTTCTAGGTAACACGGGAAAC\n', '>ctg7180000016561_4513\nT\n']
我想要做的就是删除下划线后面的数字,所以在这个例子中,输出将是:
['>ctg7180000016561\nAAAAATTTAGTTAAAACTATAACATTAGCTTGTCAAGCTAAAATTACTATGTAAGTAGTAATTTTTA\n', '>ctg7180000016561\nATCCCTCAAATAGCACCCATTAACTGATTATCCTTATTCTTAATATTCACCACCTCTCTCCTAATATTTAGAGCTTCTAACTATTTCTTTATCATGTACCCCCCCAAAAAATCTGTTTTTTATAAAAAAACTAGTATAAATAACTGATCATGATAACTAACCTCTTTTCGTCTTTCGACCCCTCTACTAACTTAAATACTAACTTTAACTGAGTTAGGACTATCCTCGGGGTGGCTGTAATCCCGAGGATATTTTGGATTATCCCCTCGCGTTTCTCCCTGCTTTGAATAAAACTTATCAGTACTCTTCACAAAGAATTCAAAGTCCTTGTTAACAACAAAAAATCCCAAGGCAGAACCCTAATCCTGATTTCCTTATTTTCTATTATTTTATTTAATAACTTCATAGGACTATTCCCATATATTTTCACATCCACAAGTCACATAGTATTAACCCTGTCCCTGGCTCTCCCCATATGACTAAGATTTATATTGTATGGGTGGGTAAATAATACAACCCACATGCTAGCCCATCTAGTACCCCAAGGAACCCCTGCCGTTCTAATACCATTTATGGTGTGTATTGAAACAATCAGAAATGTTATCCGACCCGGCACCCTGGCAATCCGGCTATCCGCAAATATAATTGCAGGACACCTACTAATAACCCTTCTAGGTAACACGGGAAAC\n', '>ctg7180000016561\nT\n']
我正在使用正则表达式,我有一个完美的匹配,但我不知道如何实际删除子字符串。到目前为止我的代码是:
pattern = re.compile('_[0-9]*')
for x in SequenceList:
re.sub(pattern, '', x)
我知道这只是在更改变量 x,但即使我只是在 for 循环中 print x
,模式也不会被删除。我如何实际删除模式并更改列表?
谢谢你,如果这已经在某个地方得到回答,我们很抱歉!
【问题讨论】:
【参考方案1】:字符串是不可变的。因此,re.sub
将创建一个新字符串。相反,您可以使用列表推导式创建一个带有替换字符串的新列表,如下所示
import re
pattern = re.compile(r"_\d+")
print [pattern.sub("", item) for item in data]
【讨论】:
完美运行,谢谢。出于兴趣,您选择模式 _\d+ 而不是 _[0-9]* 是否有原因? @PaulBarr\d
很容易写 :-) 除此之外,_[0-9]*
将替换 _
,即使后面没有数字,因为 *
表示匹配 0或更多次。所以,如果字符串是_a
,就会匹配_
,匹配数字0次。
有道理!再次感谢以上是关于使用正则表达式从python中的列表项中删除子字符串的主要内容,如果未能解决你的问题,请参考以下文章