python - 使用 re.compile 迭代 pandas 数据帧
问题描述
我有这个正则表达式函数来提取实体之一
Entity_regex = re.compile(r'(Entity1:)(\s*)((?:[a-zA-Z0-9-/]*)(\s[A_Z]))' , re.IGNORECASE|re.DOTALL)
match = re.search(Entity_regex, text)
if match:
Entity1 = match.group(3)
else:
Entity1 = 'NA'
这对实体来说很好用。
同样,我要从文本文件中提取许多实体。我已经用实体搜索词和它们的模式制作了数据框,如下所示的两列;
Entity Regex
Entity1: (?:[a-zA-Z0-9-/]*)(\s[A_Z])
Entity2: (\d{4}-\d{2}-\d{2} \d{2}:\d{2} - \d{4}-\d{2}-\d{2} d{2}:\d{2})
我尝试了一个for循环来迭代df,使用这样的iterrows来创建一个包含文本文件中所有实体的最终数据框
for index, row in df.iterrows():
row['Entity']=re.compile(r'(row['Entity'])(\s*)(row['Regex']') , re.IGNORECASE|re.DOTALL)
match = re.search(row['Entity'], text)
if match:
row['Entity'] = match.group(3)
else:
row['Entity'] = 'NA'
得到这样的错误:
row['Entity']=re.compile(r'(row['Entity'])(\s*)(row['Regex']') , re.IGNORECASE|re.DOTALL)
^
SyntaxError: invalid syntax
解决方案
它说语法无效,并确实将您指向正确的位置。如果您仔细查看代码,您会发现字符串中有语音标记,这将结束字符串并导致语法错误。您应该改用这一行:
row['Entity']=re.compile((r'({})(\s*)({})').format(row['Entity'],row['Regex']) , re.IGNORECASE|re.DOTALL)
推荐阅读
- boxplot - 如何制作“两个具有相同日期(x 值)但 y 值不同的箱线图”的时间序列
- kubernetes - 项目中处理多个环境时组织kubernetes yaml的最佳实践
- shell - 从 jenkins groovy 执行时,Curl 命令不起作用
- json - 如何在颤振/飞镖中创建泛型类型的对象?
- javascript - 如何使用 Express 和 knex.js 从 PostgreSQL 数组的前端添加值或元素?
- c# - SqlException 在执行期间未被用户代码处理
- wordpress - 如何在 Plesk 子域上部署 Flask 项目
- php - PusherBroadcaster 错误。Laravel 6 - 如何修复?
- android - 显示键盘时如何调整布局大小
- karate - 空手道 DSL:获取连接超时错误