首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫数据:将长正则表达式分割成多行

熊猫数据:将长正则表达式分割成多行
EN

Stack Overflow用户
提问于 2021-01-12 16:46:40
回答 1查看 60关注 0票数 0

我正在使用Pandas进行一些数据清理,我有一个非常长的正则表达式,我想把它分成多行。以下内容在Pandas中很好,因为它都在一行上:

代码语言:javascript
运行
复制
df['REMARKS'] = df['REMARKS'].replace(to_replace =r'(?=[^\])}]*([\[({]|$))\b(?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL)\b(?:\s*(?:,\s*)?(?:(?:or|and)\s+)?(?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL))*\b', value = r'<\g<0>>', regex = True)

然而,这是很难管理的。我尝试了以下详细的方法,它在常规Python中工作:

代码语言:javascript
运行
复制
df['REMARKS'] = df['REMARKS'].replace(to_replace =r"""(?=[^\])}]*([\[({]|$))
                                                      \b(?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL)
                                                      \b(?:\s*(?:,\s*)?(?:(?:or|and)\s+)?
                                                      (?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL))*\b""", value = r'<\g<0>>', regex = True)

但这在潘达斯不起作用。知道我错过了什么吗?

下面是一些用于测试的示例文本:

GR,MDT,CMR,HLDS,NEXT,NGI @ 25273,COMPTG

在9-7/8 LNR、LWDGR、RES、APWD、SONVIS、MDTS (PRESS & SAMP) ROT SWC、TSTG BOP上安装13.72

LWDGR,RES,APWD,SONVIS,GR,RES,NGI,PPC @ 31937,MDTS (PRESS & SAMP) TKG ROT SWC

LWDGR,RES @ 12586,IND,FDC,CNL,GR @ 12586,SWC,RAN CSG,PF 12240-12252,RR (新增信息)

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-12 17:09:38

一个选项是创建一个字符串列表,然后在调用join时使用replace

代码语言:javascript
运行
复制
RegEx = [r'(?=[^\])}]*([\[({]|$))\b(?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL)',
         r'\b(?:\s*(?:,\s*)?(?:(?:or|and)\s+)?',
         r'(?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL))*\b']

df['REMARKS'] = df['REMARKS'].replace(to_replace=''.join(RegEx), value=r'<\g<0>>', regex=True)

使用re

代码语言:javascript
运行
复制
import re

s = r"""(?=[^\])}]*([\[({]|$))\b(?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL)
         \b(?:\s*(?:,\s*)?(?:(?:or|and)\s+)?
         (?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL))*\b"""

df['REMARKS'] = df['REMARKS'].replace(to_replace=re.compile(s, re.VERBOSE), value=r'<\g<0>>')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65688240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档