我正在尝试打印三个变量,但我得到了一个AttributeError
"1 -3 JANE STREET "
"217- 219 EASTERN PARKWAY "
"219 -223 78TH STREET "
"28-31 34TH ST "
行['地址']的示例数据(上图)
import csv
import re
with open('/Users/d/Desktop/bldg_zip_codes.csv', 'r+') as f:
reader = csv.DictReader(f)
for index, row in enumerate(reader):
if row['address'] != None:
addy1 = re.search(r'\d\d-\d\d', row['address'])
addy2 = re.search(r'-\s\d\d', row['address'])
addy3 = re.search(r'\d\s-\d', row['address'])
print(addy1.group(), addy2.group(), addy3.group())
Traceback (most recent call last):
File "excludenumsonst.py", line 46, in <module>
print(addy1.group(), addy2.group(), addy3.group())
AttributeError: 'NoneType' object has no attribute 'group'
如果我已经在第6行排除了NoneType,为什么会出现此错误?
如何解决此问题?
答案 0 :(得分:3)
&#39; NoneType&#39;如果正则表达式未在提供的输入字符串中匹配任何内容,则对象没有属性&#39; ,因为匹配对象为None,未初始化,.group()
为None。< / p>
\d\d-\d\d
模式仅匹配28-31
中的28-31 34TH ST
,-\s\d\d
仅匹配- 21
中的217- 219 EASTERN PARKWAY
和\d\s-\d
}将匹配1 -3
和9 -2
中的1 -3 JANE STREET
和219 -223 78TH STREET
。
要使用连字符匹配初始数字,您可以使用
^\d+\s*-\s*\d+
请参阅regex demo
在代码中,您可以使用re.match
在字符串的开头匹配,而不是将^
与re.search
一起使用:
if row['address']: # Check if address is present
add = re.match(r'\d+\s*-\s*\d+', row['address']) # Run the regex
if add: # Regex matched?
print(add.group()) # Print the match value
答案 1 :(得分:0)
您没有排除None
,因为它是从re.search
生成的。您的正则表达式与您需要提取的内容不匹配。第一个正则表达式匹配连续的2个数字,后跟连字符,然后是另外2个数字,例如"28-31"
。第二个正则表达式匹配连字符后跟空格,然后是2位数,例如:"- 21"
。最后一个匹配一个数字后跟一个空格,然后是一个连字符,然后是另一个数字,例如:"1 -3"
。
你必须检查那些正则表达式,使它们符合你的需要。