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

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

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

sample
some
another one

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


当前回答

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

根据以下解释,上述方法应该有效

方括号[]内的字符定义了字符类,这意味着模式应该匹配方括号内提到的至少一个字符 \s指定一个空格 +表示前面提到的至少一个字符为+。

其他回答

这段代码将提取方括号和圆括号之间的内容

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

(?: 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

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

\[(.*?)\]

解释:

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

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

根据以下解释,上述方法应该有效

方括号[]内的字符定义了字符类,这意味着模式应该匹配方括号内提到的至少一个字符 \s指定一个空格 +表示前面提到的至少一个字符为+。

在R中,试试:

x <- 'foo[bar]baz'
str_replace(x, ".*?\\[(.*?)\\].*", "\\1")
[1] "bar"

蒂姆·皮茨克的答案在这里

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

几乎就是我一直在找的人但有一个问题是,一些传统浏览器可能会在正向向后查找时失败。 所以我今天只能靠自己了:)。我设法写下了这些:

/([^[]+(?=]))/g

也许它会帮助别人。

Console.log("这是一个带有[一些]特殊单词的[示例]字符串。(一)“.match (/([^[]+(?=]))/ g));