当前位置: 首页 > 知识库问答 >
问题:

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

牧梓
2023-03-14

我正在使用熊猫进行一些数据清理,我有一个很长的正则表达式,我想将其分成多行。下面的作品在熊猫很好,因为它是所有在一行:

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)

不过,这在熊猫身上不起作用。知道我错过了什么吗?

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

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

在9-7/8 LNR、LWD[GR、RES、APWD、SONVIS]和MDT上安装13.72(按

LWD[GR, RES, APWD, SONVIS], GR, RES, NGI, PPC@31937, MDTS(PRESS

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

谢谢

共有1个答案

梁建德
2023-03-14

一个选项是创建一个字符串列表,然后在调用替换时使用连接

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>>')
 类似资料:
  • 问题内容: 我的pandas df包含一个包含逗号分隔特征的列,如下所示: 我想将此列拆分为多个虚拟变量列,但无法弄清楚如何启动此过程。我正在尝试像这样拆分列: 但是,这不起作用,因为描述中间有逗号。取而代之的是,我需要根据逗号的正则表达式匹配,后跟一个空格和一个大写字母进行拆分。str.split可以使用正则表达式吗?如果是这样,这是怎么做的? 我认为正则表达式可以满足我的需求: 问题答案: 是

  • 我试图将pandas数据帧从宽到长,但我找不到一个好方法。有没有建议通过熊猫来实现这一点? 预期结果:

  • 问题内容: 我有表格形式的命令输出。我正在从结果文件中解析此输出,并将其存储在字符串中。一行中的每个元素都由一个或多个空格字符分隔,因此我正在使用正则表达式来匹配1个或多个空格并将其拆分。但是,每个元素之间都会插入一个空格: 有一个更好的方法吗? 每次拆分后都会添加到列表中。 问题答案: 通过使用,您将捕获该组,如果仅删除它们,则不会出现此问题。 但是,不需要正则表达式,没有指定任何定界符将为您将

  • 问题内容: 这实际上可行吗?我有一些很长的正则表达式模式规则,这些规则很难理解,因为它们无法一次放入屏幕。例: 反斜杠或三重引号将不起作用。 编辑。我结束使用VERBOSE模式。现在是正则表达式模式的外观: 问题答案: 您可以通过引用每个段来分割正则表达式模式。无需反斜杠。 您还可以使用原始字符串标志,并且必须将其放在每个段之前。 参见文档。

  • 我想读取ArcGIS形状文件的文件,并将其转储到数据帧中。我目前正在使用dbf包。 显然,我已经能够将文件作为一个表加载,但还不能理解如何解析它并将其转换为一个数据帧。怎么做? 这就是我所处的困境: Python将此语句作为输出返回,坦率地说,我不知道该如何处理: 编辑 我的原始示例:

  • 问题内容: 我有一个很长的正则表达式,我希望在JavaScript代码中将其分成多行,以根据JSLint规则将每行长度保持80个字符。我认为这对阅读更好。这是模式样本: 问题答案: 您可以将其转换为字符串并通过调用创建表达式: 笔记: 将 表达式文字 转换为字符串时,您需要对所有反斜杠进行转义,因为在评估字符串文字时会消耗反斜杠。(有关更多详细信息,请参见Kayo的评论。) 接受修饰符作为第二个参