首页 > 解决方案 > 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)

标签: pythonfunction

解决方案


由于该mh参数未在函数的其他任何地方使用,我假设您希望它自动插入以代替mh正则表达式中的r'(?<=mh ).+'。然而,这不会发生!您必须使用格式字符串,例如f'(?<={mh} ).+'(请注意,除了我将这里不需要{...}的“原始”前缀替换为)。rf

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


推荐阅读