2010-03-08 74 views
233

简单的正则表达式问题。我有以下格式的字符串:正则表达式提取方括号内的文本

this is a [sample] string with [some] special words. [another one] 

什么是提取方括号内的单词的正则表达式,即。

sample 
some 
another one 

注意:在我的用例中,括号不能嵌套。

回答

472

您可以使用以下正则表达式全球

\[(.*?)\] 

说明:

  • \[[是元字符,需要进行转义,如果你想从字面上匹配。
  • (.*?):以非贪婪的方式匹配所有内容并捕获它。
  • \]]是一个元字符,如果你想直接匹配,需要转义。
+6

使用'[^]]'的另一个答案的方法比非贪婪('?')更快,并且也适用于不支持非贪婪的正则表达式。但是,非贪心看起来更好。 – Ipsquiggle 2010-03-08 17:24:44

+0

@Ipsquiggle你是正确的先生:) – StErMi 2012-06-30 09:49:31

+92

如何从输出(结果)中排除'''''? – 2013-04-28 22:46:52

65

这应该工作了确定:

\[([^]]+)\] 
+3

在我的用例中,括号内的文本可能包含新行,并且此正则表达式有效,而接受的答案不会。 – Dave 2013-06-08 04:59:18

+1

角色类[^]]是什么意思?它匹配什么? – Richard 2013-09-15 13:25:27

+2

@Richard,^否定字符类。它的意思是“任何不是的角色”)。 – jasonbar 2013-09-16 12:46:21

28

能括号嵌套?

如果不是:\[([^]]+)\]匹配一个项目,包括方括号。反向引用\1将包含要匹配的项目。如果您的正则表达式支持环视,请使用

(?<=\[)[^]]+(?=\]) 

这只会匹配括号内的项目。

+0

这只标志第一次出现 – 2017-12-07 13:28:54

+0

@KunalMukherjee:不,正则表达式可以匹配任意次数。但是需要明确地告诉一些正则表达式重复应用正则表达式(例如,通过在JavaScript中使用'/ g'标志)。 – 2017-12-08 15:30:23

1
([[][a-z \s]+[]]) 

以上应该工作给出下面的解释方括号[]内

  • 字符定义characte类,这意味着图案应当匹配方括号内提及ATLEAST一个charcater

  • \ s指定空间

  • +意味着至少一个之前提到的角色+。

+0

在敏感的情况下,'A-Z'应该加上样式:'([[] [a-zA-Z \ s] + []])';我认为这是一个好方法,而'\'用正则表达式模式定义字符串标记(“和”)并通过“或'用法中的反斜杠处理混合新手! – MohaMad 2017-03-01 10:46:36

36
(?<=\[).+?(?=\]) 

将捕获没有括号

内容(< =?) - 正回顾后发的[

*? - 内容的非贪婪匹配

(?=]) - 为[

EDIT阳性先行:用于嵌套括号内的下面的正则表达式应该工作:

(\[(?:\[??[^\[]*?\])) 
+2

@igaurav我检查过它,它的工作原理。但是,在不支持Javascript之类的向后看的环境中,它不起作用。也许这是你的情况? – 2015-02-11 06:21:28

+0

亚当,你的嵌套括号解决方案失败时,有一个字符串与一个'.'在其中... – patrick 2015-12-07 02:54:26

3

此代码将提取方括号之间的内容和括号

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

(?: non capturing group 
(?<=\().+?(?=\)) positive lookbehind and lookahead to extract the text between parentheses 
| or 
(?<=\[).+?(?=\]) positive lookbehind and lookahead to extract the text between square brackets 
6

(?<=\().*?(?=\))作品根据上面给出的解释,这很好。下面是一个Python示例:

import re 
str = "Pagination.go('formPagination_bottom',2,'Page',true,'1',null,'2013')" 
re.search('(?<=\().*?(?=\))', str).group() 
"'formPagination_bottom',2,'Page',true,'1',null,'2013'" 
+1

你应该总是使用代码格式正则表达式,无论他们出现。如果正则表达式在文本中而不是代码块中,则可以使用反引号对它们进行格式化。 ([ref](http://stackoverflow.com/editing-help#comment-formatting)) – 2015-04-24 01:28:45

+0

此外,问题是关于方括号('[]'),而不是括号。 – 2015-04-24 01:32:00