问题描述
我是Python的新手。我创建了以下函数来使用文件中的正则表达式搜索文本。然后将结果写入Excel工作表。
但是我收到错误消息“ NonType”,该对象没有为其的属性组(这意味着找不到匹配项)。
b_list=re.split('\s+',str(b.group()))
但是,当我将该函数用作常规代码时,我能够找到文本。因此,这意味着传递给函数的值不起作用。
如何将字符串或变量正确传递给函数?谢谢。
完整的代码如下。
import re
import openpyxl
def eval_text(mh,search_text,excel_sht,excel_col):
b_regex=re.compile(r'(?<=mh ).+')
b=b_regex.search(search_text)
b_list=re.split('\s+',str(b.group()))
if abs(b)>1:
cell_b=excel_sht.cell(row=i,column=excel_col).value='OK'
else abs(b)<1:
cell_b=excel_sht.cell(row=i,column=excel_col).value='Not OK'
wb=openpyxl.load_workbook('test.xlsm',data_only=True,read_only=False,keep_vba=True)
sht=wb['test']
url=sht.cell(row=1,column=1).value
with open (url,'r') as b:
diag_text_lines=b.readlines()
diag_text="".join(diag_text_lines)
eval_text('jame',diag_text,sht,9)
解决方法
由于mh
参数未在函数的其他任何地方使用,因此我假设您希望它会自动插入以代替正则表达式mh
中的r'(?<=mh ).+'
。但是,这不会发生!您必须使用格式字符串,例如f'(?<={mh} ).+'
(请注意,除了{...}
外,我还用r
代替了“ raw” f
前缀,在这里实际上并不需要)。
def eval_text(mh,search_text,excel_sht,excel_col):
b_regex=re.compile(f'(?<={mh} ).+')
b = b_regex.search(search_text)
...
对于旧版本的Python,请改用format
方法。如果正则表达式中使用了更多{...}
,则可能无法正常工作。在最坏的情况下,您仍然可以自己连接字符串:r'(?<=' + mh + r' ).+'
或使用旧的%
格式r'(?<=%s ).+' % mh
。