2016-02-19 494 views
1

我有一个文件布局,我想删除除括号内的数字之外的所有内容。布局的一个例子是:正则表达式将匹配除括号内的所有内容外

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

我用

(^[^\(]*) 

一切匹配的开括号。但是,当我尝试

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

我只得到在行的开始的空白处,我不知道为什么!

+0

您的尝试的部分问题是方括号之间的东西。这些是字符类的* literal *字符。 – shawnt00

回答

3

我假设你想在Notepad ++中实现这个功能。

注:(^[^\(\d{2}\)]*)包含逻辑错误:\(\d{2}\)被认为是一个序列字符的(如(22)),但被置于其中的每个符号(比第一^其他)被视为一否定的字符类作为一个单独的符号。因此,(^[^\(\d{2}\)]*)匹配并捕获从字符串/行的开始起不是(,数字,{,2,},)零次或多次的所有组。

你需要一个正则表达式,将匹配任何字符,从线(^)开始任何出现的次数(.*)到(跟着一个或多个数字(\d+),然后接着用)任何任何字符的数量,但换行符。

使用

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

而且随着$1取代。

this demo

如果它不是记事本+ +,请确保您通过/m MULTILINE修改,这样可以^匹配行的开头,而不是整个字符串。

2

使用此图案

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

和替换瓦特/ $1
Demo


或去除括号为好,使用这种模式

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

Demo

2

最简单的方法是:

\(\p{N}+\) 

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

此捕获任何括号(\(\)),并在它的任何数量的数字(\p{N}+)。

+0

Unicode类别类在某些正则表达式中不可用。 –

相关问题