使用 Notepad++ 正则表达式删除重复的时间戳时遇到问题

使用 Notepad++ 正则表达式删除重复的时间戳时遇到问题

最近我一直在尝试编辑 Discord 聊天记录。我已将其导出为原始文本,但我想清理一下。我要做的第一件事是删除同一用户在同一分钟内发送的消息的重复时间戳。以下是示例:

[15-Mar-19 02:03 PM] Originalposter#1234
Hey buddy, you doing well recently?

[15-Mar-19 02:03 PM] friendlyguy#4321
yeh

[15-Mar-19 02:03 PM] friendlyguy#4321
hru

我希望此文本变成:

[15-Mar-19 02:03 PM] Originalposter#1234
Hey buddy, you doing well recently?

[15-Mar-19 02:03 PM] friendlyguy#4321
yeh
hru 

我已经尝试过并找到了这一点:

\[(.*)\] friendlyguy#4321$(.*)$(.*)$\[(.*)\]

但是,它根本找不到文本。

我认为 ($) 符号工作不正常,但我没有什么理由相信这一点。

我将非常感激任何能帮助我弄清楚如何清理这个聊天记录的帮助。谢谢!

答案1

  • Ctrl+H
  • 找什么:(\[.+?\]\h+\w+#\d+\R)[\s\S]+?\R\K\R\1(?=[\s\S]+?\R*)
  • 用。。。来代替:LEAVE EMPTY
  • 查看 环绕
  • 查看 正则表达式
  • 取消选中 . matches newline
  • Replace all

解释:

(               # start group 1
  \[            # opening square bracket
  .+?           # 1 or more any character but newline, not greedy
  \]            # closing square bracket
  \h+           # 1 or more horizontal spaces
  \w+           # 1 or more word characters
  #             # # literally
  \d+           # 1 or more digits
  \R            # any kind of linebreak
)               # end group 1
[\s\S]+?        # 1 or more any character, not greedy
\R              # any kind of linebreak
\K              # forget all we have seen until this position
\R              # any kind of linebreak
\1              # backreference to group 1, same date, same user
(?=             # positive lookahead, make sure we have after:
  [\s\S]+?        # 1 or more any character, not greedy
  \R*             # 0 or more linebreak
)               # end lookahead

截图(之前):

在此处输入图片描述

截图(之后):

在此处输入图片描述

答案2

将记事本设置为使用 UNIX 换行格式 (LF),然后使用以下 RegEx:

(\[.{18}\] \w+#\d+\s)((\S| )+\s)\s(\1)((\S| )+)

替换使用:

\1\2\5

以下是一些相关链接:

问候

相关内容