如何从Pandas数据帧中提取正则表达式并与重新查找

2024-09-21 01:29:23 发布

您现在位置:Python中文网/ 问答频道 /正文

当我将所有RegEx表达式存储在HDF5文件中,然后试图通过pandas dataframe提取它们时,我的问题就开始了。在

主要问题是pandas dataframe中存储的RegEx表达式不能与re.findall一起正常工作。更糟糕的是,我在正则表达式中使用了阿拉伯语Unicode。在

为了简化问题,我举了一个例子:

假设将以下文本存储在变量中:

mytext = 'الفئران هم حيوانات غير معمرة لأن معدل استقلابهم مرتفع وضربات قلبهم سريعة'

让我们使用以下RegEx表达式:

^{pr2}$

如果使用代码print(re.findall(pattern_they, mytext)),我们将得到一个包含三个元素的列表:

['هم', 'استقلابهم', 'قلبهم']

现在,如果我们创建一个新模式,其中包括用双引号括起来的pattern_they

pattern_they_new = "r'([\u0621-\u064a]+\u0647\u0645|\b\u0647\u0645)\b'"

然后在print(re.findall(pattern_they_new, mytext))中使用这个模式,我们得到一个不正确的空列表。在

这里的问题是,我从pandas数据帧中提取的所有RegEx表达式都用双引号括起来,就像pattern_they_new。我在存储RegEx表达式时没有添加双引号;当我从panda dataframe中提取它们时,它们是自动添加的。在

我试图存储不带r'…'的RegEx表达式,但它对re.findall也不起作用。在

我如何解决这个问题?在

注意:这个问题是之前提出的另一个问题的后续: How to store and read RegEx raw strings from pandas dataframe


Tags: redataframepandas列表new表达式模式regex
2条回答

我找到了一个解决问题的办法,概括如下:

我试图在HDF5中存储RegEx表达式,而不使用r'...'包装它们,但是当我通过pandas dataframe从HDF5中提取它们时,它们没有被视为原始字符串,因此我不能在re.findall中使用它们。相反,我使用了双转义反斜杠,如下所示:

pattern_they = '([\\u0621-\\u064a]+\\u0647\\u0645|\\b\\u0647\\u0645)\\b'

然而,当我从pandas数据帧中提取RegEx时,我得到的结果是:

^{pr2}$

因此,我将replacere.findall一起使用,效果很好!(我得到了三个元素的列表,正如我在上面的问题帖子中所解释的那样):

print(re.findall(pattern_they_imported.replace('\\\\', '\\'), mytext))

我想知道为什么我从pandas数据帧中提取的RegEx中的双转义反斜杠变成了四转义反斜杠。不管怎样,我的解决方案是有效的,这对我来说是最重要的。在

对不起,我觉得阿拉伯语很难读,因此很难调试。一般来说,你可以做如下事情:

import re

mytext = "lorem ipsum dolor sit amet"

pattern = r'\b(ipsum)\b'
rx_new = r'{}'.format(pattern)

print(re.findall(rx_new, mytext))

这将正确生成['ipsum']
你还需要在这里添加原始标志。问题是:为什么?在

相关问题 更多 >

    热门问题