正则表达式模式处理括号

时间:2012-08-13 13:28:13

标签: regex

我正在寻找能够处理以下问题的正则表达式模式:

(to make someone) happy (adj.)

我只想得到“快乐”这个词,如果只有一个部分在括号中,正则表达式也应处理行,例如:

  • (to make someone) happy
  • happy (adj.)

我尝试了以下内容:"\s*\(.*\)" 但我的想法有些不对劲!

3 个答案:

答案 0 :(得分:2)

这一个将在所有三个选项中为您提供第一个捕获组中的正确单词:

(?:\([^)]*\)\s*)?(\w+)(?:\s*\([^)]*\))?

如果您想要获得一些单词或允许使用特殊字符,您可以进行调整并更加宽松:

(?:\([^)]*\)\s*)?([^()\n]+)(?:\s*\([^)]*\))?

答案 1 :(得分:0)

用于在两个带括号的组之间查找文本的正则表达式是

/(?:^|\([^)]*\))([^(]*)(?:$|\([^)]*\))/m

细分如下:

  1. 从括号中的某些文字或行的开头开始:(?:^|\([^)]*\))。这从开放的paren到第一个关闭的paren
  2. 匹配
  3. 然后匹配括号外的文本,并将其放在组([^(]*)中。这符合下一个开放的paren。
  4. 然后在括号中或句子末尾匹配更多文字:(?:$|\([^)]*\))
  5. 我使用了多行模式(m),以便^$匹配换行符以及字符串的开头和结尾

答案 2 :(得分:0)

尝试正则表达式(?:^|\))\s*([^\(\)]+?)\s*(?:\(|$)