用于替换字符串

时间:2017-07-29 14:18:54

标签: regex

我正在寻找模式,我希望在(),[]中替换字符串。这必须在字符串的开头和结尾处完成。

我使用这种模式。

\([^)]*\)

这会在任何地方替换字符串

例如

 Original                                 Expected
Start 1306 Sewing Machine (White) --  Singer Start 1306 Sewing Machine
(White) Start 1306 Sewing Machine --  Singer Start 1306 Sewing Machine
Start 1306 Sewing Machine [White] --  Singer Start 1306 Sewing Machine
[White] Start 1306 Sewing Machine --  Singer Start 1306 Sewing Machine

2 个答案:

答案 0 :(得分:1)

我想,“ - ”的意思是“原创 - 编辑”......

你必须使用^(行首)和$(行结束):

(^\([^)]*\)|\[[^]]*\])|(\([^)]*\)|\[[^]]*\]$)

为清楚起见:

( ... )|( ... )轮换 - 匹配1st()或2nd() ^行首,然后是

\([^)]*\)|\[[^]]*\](任何不是“)”)或[任何不是“]的东西”]

|

\([^)]*\)|\[[^]]*\](任何不是“)”)或[任何不是“]”的事后跟

$行尾

请注意,^在这里有多个含义 - 字符类的开头和反转。

答案 1 :(得分:0)

这有效

查找(?m)^(?:(?:\([^()]*\)|\[[^\[\]]*\])\s*(.*?)\s*(?:\([^()]*\)|\[[^\[\]]*\])?\s*|\s*(.*?)\s*(?:\([^()]*\)|\[[^\[\]]*\])\s*)$

替换Singer $1$2

https://codepen.io/jordanwillis/pen/bqaGRR

扩展

 (?m)
 ^ 
 (?:
      (?:
           \( [^()]* \)
        |  
           \[ [^\[\]]* \]
      )
      \s*       
      ( .*? )                       # (1)
      \s* 
      (?:
           \( [^()]* \)
        |  
           \[ [^\[\]]* \]
      )?
      \s* 
   |  
      \s*       
      ( .*? )                       # (2)
      \s* 
      (?:
           \( [^()]* \)
        |  
           \[ [^\[\]]* \]
      )
      \s* 
 )
 $