正则表达式删除所有不在方括号中的内容

时间:2018-09-12 20:29:24

标签: regex

我有这个正则表达式,可以捕获方括号内的内容。

(?<=(\[req:)).+?(?=(:req]))

这将捕获[req:和:req]内部的所有内容。例如:

my really cool string [req:do not grab this:req]that I just made

这需要:

do not grab this

但是,我想做相反的事情。我想抓住[req:和:req]内部的所有内容,包括[req:和:req]。我要抓住:

my really cool string that I just made

我正在发送一个屏幕截图,其中包含我要选择的单词,以使您更容易理解我要实现的目标。蓝色突出显示的是我要从my really cool string [req:do not grab this:req]that I just made中选择的那些:

enter image description here

2 个答案:

答案 0 :(得分:1)

您没有提到一种语言,但大多数都使用了正则表达式,
使您可以在拆分功能中使用它。

您最好的选择是使用当前正则表达式的修改版本进行拆分:

split((?<=\[req:).*?(?=:req\])

这将为您提供所有元素,除了它们之间有什么。


更困难的方法是直接在 右括号和右括号之间进行匹配。
即使此方法有效,但速度缓慢且没有考虑
平衡嵌套括号(我是可以的,但是正则表达式确实很大)。

(?s)(?:^(?:(?!\[req:|:req\]).)*?\[req:|:req\](?:(?!\[req:|:req\]).)*?\[req:|:req\](?:(?!\[req:|:req\]).)*?$)

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

可读版本:

 (?s)                          # Dot-All modifier
 (?:
                                    # Beginning    ...[req:
      ^ 
      (?:
           (?! \[req: | :req\] )
           . 
      )*?
      \[req:
   |                              # or,
                                    # Middle    :req]...[req:
      :req\]
      (?:
           (?! \[req: | :req\] )
           . 
      )*?
      \[req:
   |                              # or,
                                    # End    :req]...
      :req\]
      (?:
           (?! \[req: | :req\] )
           . 
      )*?
      $ 
 )

答案 1 :(得分:0)

为此,您需要分别捕获双方,然后再将它们合并。

(.*\[req:).*(:req\].*)

说明:

(.*\[req:)     | Capture zero or more of any characters followed by "[req:"
.*             | Match zero or more of any characters
(\[req:.*)     | Capture "[req:" followed by zero or more of any characters

Try it here