python - python 中的正则表达式跳过行的前 2 个字符

标签 python regex expression

我有一个看起来像这样的文本文件

Name     #Variants  #Cases  #Controls

CNGA3   5   5   0
GPR125  4   3   0
IGHMBP2 4   4   0
STK11IP 4   4   0
ACAD9   3   3   0
ANKRD17 3   3   0

我想解析这个文件并将所有基因名称(name 列)返回到列表 - list_of_genes 或类似的东西。

我有以下代码

gene_list = []
for i in range (6, 7):
    run_file = open('run_{}_results.txt'.format(i))
    gene = re.compile('[^\s]*', re.I)
    for line in run_file:
        match=gene.match(line, re.IGNORECASE)
        if match:
            matched_gene = match.group()
            gene_list.append(matched_gene)

当我运行该代码时,我得到的结果是

['GA3', 'R125', 'HMBP2', 'K11IP', 'AD9', 'KRD17']

正则表达式跳过了每个基因的前两个字符,我不明白为什么。

最佳答案

你的问题在这里:

match=gene.match(line, re.IGNORECASE)

second parameter to a regex object's match() methodpos,表示匹配操作的起始位置。 re.IGNORECASE 恰好是 2

您已经在编译时将正则表达式定义为不区分大小写,因此当然没有必要再次这样做(因此没有办法这样做)。此外,您的正则表达式无论如何都不需要该选项,因为它不包含任何大小写字符。

虽然我在这里,"[^\s]*" 应该是 r"\S*"

关于python - python 中的正则表达式跳过行的前 2 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17372334/

相关文章:

Java字正则表达式

c# - 我怎样才能从一个非类型化的表达式返回到一个类型化的表达式?

python - 使用Python将JSON转换为CSV

c++ - 从 tr1::regex_search 获取匹配索引

c# - 使用表达式通过字符串路径更新嵌套属性值

c# - 匹配带重音的字母

c# - 正则表达式匹配除给定列表之外的所有单词

python - 如何使用 Python 查看文件而不是目录的更改?

python - 远程热插拔 Python 调试器

python - 使用@abstractproperty 和@abstractmethod 实现/覆盖的实际差异