python - 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
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
。
推荐阅读
- java - 将一组三个整数编码为一个唯一数字
- javascript - Node.js - 缓冲区与 Uint8Array
- android - Android Material Components 主题 - 当字段聚焦时更改 TextInputLayout/TextInputEditText 标签和下划线的颜色
- vb.net - 使用来自不同文本文件的两个字段执行线性搜索
- linux - 如何清理aws ec2服务器?
- php - 使用带有 MySQL 查询变量的 PDO 准备语句
- .htaccess - .htaccess 重定向链接组合
- javascript - 使用正则表达式在标点符号后添加空格但忽略 US 的实例
- sql - Oracle 一天中所有查询的总(经过)时间
- java - 未知类“名称”