微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。