Pandas dataframe:将长的正则表达式拆分为多行
Pandas dataframe:将长的正则表达式拆分为多行
我正在使用Pandas进行一些数据清理,我有一个非常长的正则表达式,我想将其分成多行。以下内容在Pandas中运行良好,因为它在一行上:
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中运行良好:
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)
但是,在Pandas中无法工作。有什么想法我缺失了什么?
以下是用于测试的一些示例文本:
GR,MDT,CMR,HLDS,NEXT,NGI @ 25273,COMPTG
FIT 13.72 ON 9-7/8 LNR,LWD [GR,RES,APWD,SONVIS],MDTS(PRESS&SAMP)
ROT SWC,TSTG BOP
LWD [GR,RES,APWD,SONVIS],GR,RES,NGI,PPC @ 31937,MDTS(PRESS&
SAMP)TKG ROT SWC
LWD [GR,RES] @ 12586,IND,FDC,CNL,GR @ 12586,SWC,RAN CSG,PF
12240-12252,RR(添加信息)
谢谢!
admin 更改状态以发布 2023年5月20日
一个选项是创建一个字符串列表,然后在调用replace
时使用join
。
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
。
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>>')