Python:使用re将字符串传递给函数

问题描述

我是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