pandas 正则表达式,用于取消换行符,以将3行的组聚合为1行

dphi5xsq  于 2023-06-28  发布在  其他
关注(0)|答案(1)|浏览(94)

我正在尝试使用python和regex修复txt文件格式。为此,我使用这个post作为起点,但我不能让它与我的文件格式。
Regex:

([^1|-])[\n](.)|(.)[\n]([^|-])

我的文件格式是这样的:

|A  |B  |C  |
 D  |E  |
F  |G  |

我想这样解析它:

|A  |B  |C  |D  |E  |F  |G  |

在不删除任何分隔符、管道或内容的情况下,只在它们之间换行。
问题是它替换了换行符附近的管道和其他字符。

我需要在正则表达式中修改什么?

lmyy7pcs

lmyy7pcs1#

您的模式([^1|-])\n(.)|(.)\n([^|-])使用了左右两个捕获组的交替,每侧总共匹配3个字符。
因此,如果您希望结果中包含捕获组数据,则必须在替换中使用这些组。
但是这个否定的字符类[^1|-]也可以匹配空格或换行符,并且不考虑多个空格字符。
您可以做的是匹配一个管道,然后在换行符周围加上可选的空格,并在替换中使用单个管道。

\|[^\S\n]*\n[^\S\n]*

请参见regex 101 demo

import re

regex = r"\|[^\S\n]*\n[^\S\n]*"

s = ("|A  |B  |C  |\n"
            " D  |E  |\n"
            "F  |G  |")

print(re.sub(regex, '|', s))

输出量

|A  |B  |C  |D  |E  |F  |G  |

因为\s * 也可以 * 匹配换行符,所以更短的选项可以使用regex = r"\|\s+",但是当没有换行符时,它也会匹配管道后面的空格。

相关问题