繁体   English   中英

使用 python 删除字符串中包含任何给定子字符串的所有单词

[英]Remove all words in a string that contain any given substrings using python

我有一个 .csv 文件,其中有一列包含文本。 对于此列中的每个项目,都有一个基因名称和一个日期(例如“CYP2C19, CYP2D6 07/17/2020”)。 我想从该列中的所有值中删除日期,以便只有两个基因可见(输出:'CYP2C19,CYP2D6')。 其次,在某些框中既有基因名称,也有没有建议的指示('CYP2C9 08/19/2020(无建议')。在这些情况下,我想删除日期和声明无推荐(输出:'CYP2C19,CYP2D6')。

我尝试使用下面的代码删除包含单个字符串的斜杠的任何文本(我还没有尝试对整个.csv 文件进行任何操作)。 然而,不幸的是,它从日期离开了 07。

import re
pattern = re.compile('/(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+')
s = 'CYP2C19, CYP2D6 07/17/2020'
pattern.sub('', s)

Output:'CYP2C19,CYP2D6 07'

我认为您可以获取每一列然后将其拆分:例如,让我们采用以下字符串: column = ' CYP2D6 07/17/2020' 您可以这样做: m = column.split()然后您将获得:一个类似的列表: m=['CYP2D6','07/17/2020']之后你可以简单地采取: gene = m[0]

一种方法是从字符串中取出日期,然后随意拆分。 请注意,这适用于任意数量的日期:

import re
x = 'CYP2C19, CYP2D6 07/17/2020'
x = re.sub(r'\s*\d{2}/\d{2}/\d{4}', "", x)

如果您总是知道只有一个空格将您想要的术语和日期分开,您可以将\s*替换为 \ \s ,但我认为没有理由这样做。

请注意,您现在可以通过分隔符将其拆分,在您的问题中,分隔符实际上是一个逗号后跟一个空格

result = x.split(", ")
# ['CYP2C19', 'CYP2D6']

尽管在您的 csv 中,您可能会发现它只是一个逗号(通常是 CSV)。

结合以上步骤:

import re
x = 'CYP2C19 08/15/1972, CYP2D6 07/17/2020'
x = re.sub(r'\s*\d{2}/\d{2}/\d{4}', "", x).split(", ")
# ['CYP2C19', 'CYP2D6']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM