regex 如何在Python中将非字母数字符号的重复序列合并为一个?

lhcgjxsq  于 2023-08-08  发布在  Python
关注(0)|答案(1)|浏览(75)

我有一个可能包含重复的非字母数字序列的文本,例如:

abc\n \n def\n \n kk

字符串
在这个例子中,回车符号后面跟着空格,并且重复。我只需要留下一个这样的序列:

abc\n def\n kk


问题是我无法预测序列可能由哪些确切的符号组成(可能是空格、制表符,等等),所以我需要一些解决方案(我猜是正则表达式)来找到所有这样的重复,并将它们替换为一个。
其他情况:

  • 多逗号序列
  • 制表符后跟空格
  • 空间序列
  • 和其他人。

@Barmar的解决方案几乎是完美的,但由于某种原因,它没有替换本例中的所有此类序列:

\n \n \n \n \n \n aaa \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n bbb \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n aaa \n \n \n  \n  \n  \xa0May 25, 2023 \n\n  \n\n  \n  \n  \n \n \n \n\n                    \n                    ttt\n\n                    \n                 \n \n Read more \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n tt \n          \n\n          \xa0•\xa0©\n          \n          2023\n          \n\n         \n \n          sss \xa0 eee \n \n \n \n \n \n \n \n \n


测试结果:

\n aaa \n bbb \n aaa \n \n  \xa0May 25, 2023 \n\n  \n \n \n \n ttt\n \n \n Read more \n tt \n \n \xa0•\xa0©\n          2023\n \n \n  sss \xa0 eee \n


我认为上面的例子是不正确的,因为它只是替换多个序列的结果,结果它有它们。重复应用regex会有所帮助。

eni9jsuy

eni9jsuy1#

使用捕获组来匹配第一次出现,并使用反向引用来匹配重复。然后将其替换为捕获的值。
\W匹配非字母数字字符。

s = 'abc\n \n def\n \n kk'
result = re.sub(r'(\W+?)\1+', r'\1', s)
print(result)

字符串

相关问题