我有下面的代码搜索模式,如果模式存在,则将模式分配给变量num
。
for row1 in cursor1:
try:
m = re.search(r"^[0-9]+(?=\s)", row1[0])
num = m.group()
except Exception as e:
pass
然后我在下面的代码中使用num
变量:
z1=(item for item in numlist if item[6]==num and harversine.myhaversine(custx,custy,item[2],item[3])<150)
我想消除num变量并将与正则表达式直接匹配的文本与item[6]
中的if item[6]==re.search(r"^[0-9]+(?=\s)",row1[0]).group()
进行比较,但是当然这会给我一个没有图案。如何在不收到nonetype has no attribute group()
错误的情况下实现我的目标?
PS:此处未显示的整体代码循环遍历行,创建元组并根据if语句的实现分配必要的值。我想更改代码中显示的正则表达式匹配部分以获得更好的性能,因为并非所有行都使用num
变量。我希望仅对使用此变量的行运行正则表达式。
答案 0 :(得分:0)
正如Karoly Horvath指出的那样,你可以利用不匹配的文本返回无对象
In [2]: m = re.search(r"^[0-9]+(?=\s)", row1[0])
Out [2]: None
您可以在条件
中使用此功能z1=(item for item in numlist if (re.search(r"^[0-9]+(?=\s)",row1[0]) and item[6]==re.search(r"^[0-9]+(?=\s)",row1[0]).group()) and harversine.myhaversine(custx,custy,item[2],item[3])<150)
re.search(r"^[0-9]+(?=\s)",row1[0])
的返回值,即None
将评估为false,使整个条件的值为false。