用于查找和替换完整匹配项的正则表达式(连续重复,保留分隔符)

问题描述 投票:0回答:1

搜索时,有必要找到完全匹配的单词/短语并替换为新的:

  • 如果值为空,则删除。
  • 如果值不为空,则将其替换为单词/短语,同时保留分隔符。

原文:

1:
Coconut
2:
ACoconut
3:
Coconut!
4:
!CoconutA

5:
Coconut,Orange,Coconut,Pear,Coconut
6:
ACoconut,Orange,Coconut!,Pear,!CoconutA

7:
Coconut,Coconut
8:
ACoconut,Coconut!
9:
Coconut,Coconut,Coconut
10:
ACoconut,Coconut!,!CoconutA

11:
Coconut,Coconut,Orange
12:
ACoconut,!Coconut,Orange
13:
Coconut,Coconut,Coconut,Orange
14:
Coconut,ACoconut,!Coconut,Orange
15:
Orange,Coconut,Coconut,Pear
16:
Orange,Coconut,CoconutA,Pear

17:
Orange,Coconut,Coconut,Coconut,Pear
18:
Orange,ACoconut,Coconut,!Coconut,Pear
19:
Pear,Coconut,Coconut
20:
Pear,Coconut!,Coconut
21:
Pear,!Coconut,Coconut,ACoconut
22:
Pear,CoconutA,!Coconut,Coconut

预期结果:

细微差别:

  1. 我使用 Notepad++ 进行搜索和替换。
  2. 如果单词/短语之前和/或之后有额外的字符,则这不是完全匹配(仅忽略逗号)。
  3. 如果某个单词/短语通过分隔符(在本例中为逗号)顺序重复,则该序列将被一个单词/短语替换。这个序列是从文本的开头、中间还是结尾开始并不重要。
  4. 单词/短语必须完全匹配(为此,我的表达式使用 ^、逗号分隔符和 $)。替换文本时,我不必自己指定分隔符,这应该使用表达式的一部分(捕获组)来完成。
  • 替换为:
     
    - 表示空白,而不是空格

    1:
    
    2:
    ACoconut
    3:
    Coconut!
    4:
    !CoconutA
    
    5:
    Orange,Pear
    6:
    ACoconut,Orange,Coconut!,Pear,!CoconutA
    
    7:
    
    8:
    ACoconut,Coconut!
    9:
    
    10:
    ACoconut,Coconut!,!CoconutA
    
    11:
    Orange
    12:
    ACoconut,!Coconut,Orange
    13:
    Orange
    14:
    ACoconut,!Coconut,Orange
    15:
    Orange,Pear
    16:
    Orange,CoconutA,Pear
    
    17:
    Orange,Pear
    18:
    Orange,ACoconut,!Coconut,Pear
    19:
    Pear
    20:
    Pear,Coconut!
    21:
    Pear,!Coconut,ACoconut
    22:
    Pear,CoconutA,!Coconut
    
  • 替换为:
    Tomato

    1:
    Tomato
    2:
    ACoconut
    3:
    Coconut!
    4:
    !CoconutA
    
    5:
    Tomato,Orange,Tomato,Pear,Tomato
    6:
    ACoconut,Orange,Coconut!,Pear,!CoconutA
    
    7:
    Tomato
    8:
    ACoconut,Coconut!
    9:
    Tomato
    10:
    ACoconut,Coconut!,!CoconutA
    
    11:
    Tomato,Orange
    12:
    ACoconut,!Coconut,Orange
    13:
    Tomato,Orange
    14:
    Tomato,ACoconut,!Coconut,Orange
    15:
    Orange,Tomato,Pear
    16:
    Orange,Tomato,CoconutA,Pear
    
    17:
    Orange,Tomato,Pear
    18:
    Orange,ACoconut,Tomato,!Coconut,Pear
    19:
    Pear,Tomato
    20:
    Pear,Coconut!,Tomato
    21:
    Pear,!Coconut,Tomato,ACoconut
    22:
    Pear,CoconutA,!Coconut,Tomato
    

我的尝试(结果):

  • 查找内容:
    ^(Coconut)$|^(Coconut)(,)|(,)(Coconut)(,)|(,)(Coconut)$
    1. 替换为:

      $4$7$3$6

      1:
      
      2:
      ACoconut
      3:
      Coconut!
      4:
      !CoconutA
      
      5:
      ,Orange,,Pear,
      6:
      ACoconut,Orange,Coconut!,Pear,!CoconutA
      
      7:
      ,Coconut
      8:
      ACoconut,Coconut!
      9:
      ,Coconut,
      10:
      ACoconut,Coconut!,!CoconutA
      
      11:
      ,Coconut,Orange
      12:
      ACoconut,!Coconut,Orange
      13:
      ,Coconut,,Orange
      14:
      ,ACoconut,!Coconut,Orange
      15:
      Orange,,Coconut,Pear
      16:
      Orange,,CoconutA,Pear
      
      17:
      Orange,,Coconut,,Pear
      18:
      Orange,ACoconut,,!Coconut,Pear
      19:
      Pear,,Coconut
      20:
      Pear,Coconut!,
      21:
      Pear,!Coconut,,ACoconut
      22:
      Pear,CoconutA,!Coconut,
      
    2. 替换为:

      $4$7Tomato$3$6

      1:
      Tomato
      2:
      ACoconut
      3:
      Coconut!
      4:
      !CoconutA
      
      5:
      Tomato,Orange,Tomato,Pear,Tomato
      6:
      ACoconut,Orange,Coconut!,Pear,!CoconutA
      
      7:
      Tomato,Coconut
      8:
      ACoconut,Coconut!
      9:
      Tomato,Coconut,Tomato
      10:
      ACoconut,Coconut!,!CoconutA
      
      11:
      Tomato,Coconut,Orange
      12:
      ACoconut,!Coconut,Orange
      13:
      Tomato,Coconut,Tomato,Orange
      14:
      Tomato,ACoconut,!Coconut,Orange
      15:
      Orange,Tomato,Coconut,Pear
      16:
      Orange,Tomato,CoconutA,Pear
      
      17:
      Orange,Tomato,Coconut,Tomato,Pear
      18:
      Orange,ACoconut,Tomato,!Coconut,Pear
      19:
      Pear,Tomato,Coconut
      20:
      Pear,Coconut!,Tomato
      21:
      Pear,!Coconut,Tomato,ACoconut
      22:
      Pear,CoconutA,!Coconut,Tomato
      
regex notepad++
1个回答
0
投票
  • Ctrl+H
  • 查找内容:
    ^Coconut(?:,|$)|(?:^|,)Coconut$|(,)Coconut,(?:Coconut,)*
  • 替换为:
    leave empty
  • 勾选 火柴盒
  • 勾选环绕
  • SELECT 正则表达式
  • 取消勾选
    . matches newline
  • 全部替换

说明:

^               # beginning of line
Coconut         # literally
(?:,|$)         # a comma or end of line
|               # OR
(?:^|,)         # beginning of line or comma
Coconut         # literally
$               # end of line
|               # OR
(,)             # group 1, a comma
Coconut,        # literally
(?:Coconut,)*   # Coconut followed bye a comma, may appear 0 or more times

更换:

(?1$1)          # if group 1 exists, print it

截图(之前):

截图(之后):


替换为

Tomato

  • 查找内容:
    (^|,)Coconut(?:,Coconut)*(,|$)
  • 替换为:
    $1Tomato$2
© www.soinside.com 2019 - 2024. All rights reserved.