当前位置: 首页 > 知识库问答 >
问题:

在python列表中查找筛选特定字符串的正确规则

狄宇
2023-03-14

我有一个很大的纯文本文件,我必须在Python3中‘清理’它。

现在,我将它读入一个包含以下字符串的列表:

['[chr10:43612033[C', '[chr10:61665880[G', 'C[chr20:3835205[', ']chr20:3870375]T', 'G]chr6:117650611]']

我的目标是将它变成一个仅包含中间部分'chr_xx:number'的字符串的列表。这意味着我需要找到一种方法,从原始字符串的开头和结尾删除1个或2个字符。

['chr10:43612033', 'chr10:61665880', 'chr20:3835205', 'chr20:3870375', 'chr6:117650611']

我在这里的问题是,我不能像模式一样按索引切片:

+介于1-22或X或Y之间的任意数字,例如。 CHR1CHR22CHRXCHRY

:后面的部分可以是最多跨越9位的任何整数。因此,我不能仅仅通过删除前x个字符或最后x个字符来进行切片。

这是因为有时我的相关字符串前面有2个字符,有时只有一个字符。如:

<any_letter>]chr10:<the_number>

]chr10:<the_integer>

或者相同的故事,但带有开头的方括号[

字符串的最后部分也是如此。在我著名的1到9位数的任意长度的整数后面,我得到了] 或仅有一个]或相同的模式,但带有开头的方括号。

有什么高雅的想法吗?

共有1个答案

宋智明
2023-03-14

正如注释中所建议的,您可以通过使用以下模式来简单地使用regex

chr<digits>or<XY>:<digits>

如果您想了解更多关于正则表达式的信息,请查看以下内容

下面是一个工作示例

import re

strings = [
    '[chr10:43612033[C',
    '[chr10:61665880[G',
    'C[chr20:3835205[',
    ']chr20:3870375]T',
    'G]chr6:117650611]',
    'G]chrX:117650611]',
    'G]chrY:117650611]',
]
print([re.search(r"chr(\d+|[X-Y]):\d+", s).group(0) for s in strings])

输出:

['chr10:43612033', 'chr10:61665880', 'chr20:3835205', 'chr20:3870375', 'chr6:117650611', 'chrX:117650611', 'chrY:117650611']
 类似资料:
  • 问题内容: 背景: 示例列表: 我想检索一个子串是否匹配的元素,例如 码: 如果列表中的任何元素包含模式,则上面的命令会打印出来。 我想打印与子字符串匹配的元素。因此,如果我要检查,我只想从列表中打印。 问题答案: print [s for s in list if sub in s] 如果要用换行符分隔它们: 完整示例,不区分大小写:

  • 我有一个HashMap,里面有键和值。我想用字符串中映射的值替换键。 在字符串中,键被写成@keyname或@“keyname”,这些应替换为map.get(“keyname”) 假设我们的地图是这个 所以如果我们处理字符串“Hello world,Iam@key1 years old.”,它将变成“Hello world,Iam 2 years old.”。 我们可以用@“key1”代替@key

  • 我有超过15个字符串列表,每个列表包含几个不同的代码。每个列表包含一种特定类型的代码。我有一个输入代码,必须找出该输入代码属于哪个列表,并根据结果返回一个特定字符串。我用if,else if来做这个。下面是示例代码 每个列表如下所示:公共静态列表codeTypeOneList=新ArrayList(); (其他代码类型的类似列表) 有没有更好的方法来实现这一点?谢谢

  • 问题内容: 我需要有关正则表达式的帮助:我正在尝试检查一个句子是否包含特定单词。 让我们以这个主题的标题为例: “正则表达式以查找字符串中的特定单词” 我需要查找它是否包含 if ,在这种情况下它是错误的。 我无法使用包含的方法,因为在这种情况下它将返回true( 如果为 * ic, 则为 spec * ) 我当时在考虑使用方法匹配,但我有点正则表达式。 基本上,匹配方法输入中的正则表达式需要指定

  • 我需要一些正则表达式方面的帮助:我正在尝试检查一个句子是否包含特定的单词。 让我们以本主题的标题为例: “在字符串中查找特定单词的正则表达式” 我需要找出它是否包含if这个词,在这个例子中它是假的。 我不能使用方法包含,因为它在这种情况下会返回true(规范*if*ic) 我在考虑使用matches方法,但我对正则表达式有点不在行。 基本上,匹配方法的输入中的正则表达式需要指定在我要查找的单词之前

  • 问题内容: 如何将列表中的字符串转换为正确的列表? 我对此感到厌倦,但并非我所期望的: 我想要这样: 谢谢 问题答案: 使用literal_eval从AST模块: 与不同,literal_eval可安全地用于用户字符串或其他未知字符串源。它只会将字符串编译成基本的python数据结构-其他所有方法都会失败。 或者,如果您的字符串就是这样(即,没有嵌入的逗号或在带引号的字符串内解析的意思),则可以强