Python搜索所有行中的模式,仅导出带有结果的行

时间:2018-06-04 23:42:04

标签: python regex

我想搜索与文本文件中的模式匹配的字符串,并仅导出匹配的字符串

k=''
regex = re.compile(r'[a-zA-Z]{2}\d{8}')

with open(file, 'r') as f:
    for line in f:
        line = line.replace(',', '')
        line = line.replace('.', '')
        k = regex.findall(line)
        #k.append(line)
    if not k=='':
        position=True
    else:
        position=False
    if position==True:
        print(k)

不知怎的,我的代码不起作用,它总是返回以下输出:

[] [] [] [] [] [] [] ['AI13933231'] [] [] [] [] []

我希望输出只包含匹配的字符串。谢谢!

1 个答案:

答案 0 :(得分:1)

存在空数组文字[]的原因是因为此行实际存在,但是为空(仅包含\n)或与正则表达式'[a-zA-Z]{2}\d{8}'不匹配。请注意regex.findall(line)返回一个列表,因此如果正则表达式找不到匹配的列表,则为空列表。

您在此部分中发生了主要错误:if not k=='':。注意k是一个列表。

考虑以下代码:

import re

k=''
regex = re.compile(r'[a-zA-Z]{2}\d{8}')

with open("omg.txt", 'r') as f:
    for line in f:
        line = line.replace(',', '')
        line = line.replace('.', '')
        k = regex.findall(line)
        #k.append(line)

        position = False        
        if str(k) != '[]': # The `[]` is just the string representation of an empty array
            position=True
            print(k)
        else:
            position=False

给定文件(#之后的文本被忽略,不是文件的一部分)

AZ23153133
# Empty line
AB12355342
gz # No match
XY93312344

输出为

['AZ23153133']
['AB12355342']
['XY93312344']