正则表达式将匹配除括号内的所有内容

时间:2016-02-19 20:34:59

标签: regex

我有一个文件布局,我想删除括号内的数字以外的所有内容。布局的一个例子是:

C10438     03  EXT-OBLN-ASSN           PIC X(05).    
           03  EXT-OWN-NAME            PIC X(40).

我用过

(^[^\(]*) 

将所有内容与开括号匹配。但是当我尝试

(^[^\(\d{2}\)]*) 

我只在行首开始得到空格,我不明白为什么!

3 个答案:

答案 0 :(得分:3)

我假设你想在Notepad ++中实现它。

注意:(^[^\(\d{2}\)]*)包含逻辑错误:\(\d{2}\)应该是字符的序列(如(22)),但会被放入< em>否定字符类其中每个符号(第一个^除外)被视为单独的符号。因此,(^[^\(\d{2}\)]*)会匹配并捕获不是(,数字,{2})的所有内容。 ,从字符串/行的开头起零次或多次。

您需要一个匹配任何字符的正则表达式,从行首(.*)到^之后的任意数量的出现次数(,然后是一个或多个数字(\d+)然后跟)以及任意数量的字符,但换行符。

使用

^.*\((\d+)\).*

并替换为$1

请参阅this demo

如果不适用于Notepad ++,请确保传递/m MULTILINE修饰符,以便^可以匹配行的开头,而不是整个字符串。

答案 1 :(得分:2)

使用此模式

.*?(\(\d\d\))|.*

并替换w / $1
Demo

或要删除括号,请使用此模式

.*?\((\d\d)\)|.*

Demo

答案 2 :(得分:2)

最简单的方法是:

\(\p{N}+\)

https://regex101.com/r/aH2vK5/1

这会捕获任何括号(\(\))及其中的任意位数(\p{N}+)。