我想搜索与文本文件中的模式匹配的字符串,并仅导出匹配的字符串
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'] [] [] [] [] []
我希望输出只包含匹配的字符串。谢谢!
答案 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']