我试图使用Regex返回加拿大邮政编码通过一个CSV文件的每一行。你知道吗
环境:在win10上运行python3.6。通过Jupyter笔记本和Win 10 CLI提示符测试代码。你知道吗
问题是,当通过CSV文件使用FOR循环找到对象时,我似乎无法让对象返回字符串。你知道吗
在列表中使用re很好:
import re
address = [ 'H1T3R9',
'/a/b/c/la_seg_x005_y003.npy',
'H1K 3H3',
'F2R2V2',
'H1L 3W6',
'j1r 4v5',
'/y',
'h2r 2x8',
'J9R 5V9',
'Non disponible, h2r 2x8, montreal']
# I also tried this one at some point,# r'^((\d{5}-\d{4})|(\d{5})|([AaBbCcEeGgHhJjKkLlMmNnPpRrSsTtVvXxYy]\d[A-Za-z]\s?\d[A-Za-z]\d))$))
regex = re.compile(r'\b[a-z]\d[a-z]\s\d[a-z]\d\b')
goodPostalCode = filter(regex.search, address)
print(*goodPostalCode)
输出:
j1r 4v5 h2r 2x8 Non disponible, h2r 2x8, montreal
但是当添加CSV组件时,它似乎中断了。你知道吗
import re
import csv
with open('data.csv', newline='') as f:
reader = csv.reader(f)
for row in reader:
#print(row)
regex = re.compile(r'\b[a-z]\d[a-z]\s\d[a-z]\d\b')
postcode = filter(regex.search, row[7])
print(postcode)
输出:
<filter object at 0x000001E4FA70D908>
似乎每次迭代都会找到对象过滤器对象
我的理解是,我可以在CSV中循环,因为每一行都会返回一个列表或元组,然后我可以使用*re在字符串中的特定列中使用其索引来查找匹配的模式。你知道吗
我哪里出错了?你知道吗
您不需要在循环中使用
filter
,因为row[7]
的值是字符串,而不是字符串列表。你知道吗或者,您可以先创建一个行列表,然后运行filter
相关问题 更多 >
编程相关推荐