如何在每行不同但具有相同分隔符的情况下删除前后文本 Notepad++

how to remove before and after text in a case where each line is different but has the same separators notepad++

提问人:throwaway123 提问时间:11/6/2023 最后编辑:Totothrowaway123 更新时间:11/6/2023 访问量:49

问:

我想尝试删除分隔符前后的文本,但中间的文本并不完全相同。

123:[email protected]:hello
hello:[email protected]:891

以及我想要的结果。

:[email protected]:
:[email protected]:

我试图在这里找到一个查找和替换字符串,但我找不到一个满足我需求的字符串。找到并尝试使用不同的格式,我尝试编辑、查找和替换字符串,但都无法满足我的需要。

记事本++

评论


答:

0赞 Keyboard Corporation 11/6/2023 #1

“查找和替换”功能与正则表达式模式结合使用。

在您的例子中,分隔符是冒号 (:),您希望将文本保留在冒号之间并删除其余部分。

方向:

  1. 打开“查找和替换”对话框 (Ctrl + H)。
  2. 在“查找内容”字段中,输入以下正则表达式:。此表达式将匹配冒号前后的任何文本。(.*:)(.*)(:.*)
  3. 在“替换为”字段中,输入 。这会将匹配的文本替换为第二组(冒号之间的文本)。\2
  4. 确保选择“正则表达式”作为搜索模式。
  5. 单击“全部替换”以应用更改。

预期输出:

:[email protected]:
:[email protected]:

评论

1赞 The fourth bird 11/7/2023
您在这里不需要 3 个捕获组,只需中间的捕获组就足够了,然后替换为并注意 OP 希望保留周围的 在此处查看您当前的输出 regex101.com/r/3MfszS/1$1:
1赞 Toto 11/6/2023 #2
  • Ctrl+H
  • 查找内容:^.*?(:.+?:).*$
  • 替换为:$1
  • TICK 环绕
  • SELECT 正则表达式
  • 取消勾选 . matches newline
  • Replace all

解释:

^           # beginning of line
    .*?         # 0 or more any character but newline, not greedy
    (           # group 1
        :           # colon
        .+?         # 1 or more any character but newline, not greedy
        :           # colon
    )           # end group 1
    .*          # 0 or more any character but newline
$           # end of line

更换:

$1          # content of group 1

截图(前):

在此处输入图像描述

截图(后):

在此处输入图像描述

评论

1赞 The fourth bird 11/7/2023
如果只是关于冒号,这可能是另一种选择^[^\n:]*(:[^\n:]+:).*$
1赞 Toto 11/7/2023
@Thefourthbird:你是对的,但打字时间更长;-)