正则表达式提取方括号之间的文本

简单的正则表达式问题。 我有以下格式的字符串:

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

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

 sample some another one 

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

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

 \[(.*?)\] 

说明:

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

这应该工作得很好:

 \[([^]]+)\] 

括号可以嵌套吗?

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

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

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

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

将捕获无括号的内容

(?<= [) – 正面lookbehind为[

。*? – 非贪婪的内容匹配

(?=]) – 积极向前看[

编辑:嵌套括号下面的正则表达式应该工作:

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

(?<=\().*?(?=\))按照上面给出的解释工作良好。 以下是一个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'" 

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

 (?:(?<=\().+?(?=\))|(?<=\[).+?(?=\])) (?: 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 
 ([[][az \s]+[]]) 

以上应该给予以下解释

  • 方括号[]中的字符定义字符类,这意味着模式应该匹配方括号内提到的至少一个字符

  • \ s指定一个空格

  • +表示前面提到的至少一个字符+。