当我将所有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
我找到了一个解决问题的办法,概括如下:
我试图在HDF5中存储RegEx表达式,而不使用
r'...'
包装它们,但是当我通过pandas dataframe从HDF5中提取它们时,它们没有被视为原始字符串,因此我不能在re.findall
中使用它们。相反,我使用了双转义反斜杠,如下所示:然而,当我从pandas数据帧中提取RegEx时,我得到的结果是:
^{pr2}$因此,我将
replace
与re.findall
一起使用,效果很好!(我得到了三个元素的列表,正如我在上面的问题帖子中所解释的那样):我想知道为什么我从pandas数据帧中提取的RegEx中的双转义反斜杠变成了四转义反斜杠。不管怎样,我的解决方案是有效的,这对我来说是最重要的。在
对不起,我觉得阿拉伯语很难读,因此很难调试。一般来说,你可以做如下事情:
这将正确生成
['ipsum']
。你还需要在这里添加原始标志。问题是:为什么?在
相关问题 更多 >
编程相关推荐