正则表达式匹配括号及其内容,如果它不以下划线开头

时间:2017-06-24 16:40:09

标签: python regex

我有这个正则表达式:

select (case when amount < 0 then payer else payee end) as payee,
       (case when amount < 0 then payee else payer end) as payer,
       abs(amount)
from (select least(payee, payer) as payee, greatest(payee, payer) as payer,
             sum(case when payee = least(payee, payer) then amount else - amount end) as amount
      from t
      group by least(payee, payer), greatest(payee, payer)
     ) t;

匹配字符串的括号和括号内的内容。如果括号前没有_,我希望它只匹配。

例如,我想在本例中匹配(文本):

  

这是一些随机(文本)

但我不希望它与此示例中的任何内容匹配:

  

这是另一个(文本)

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以使用 负面反对

function f1() {
    return 1
    +2
}

console.log(f1());

正如此regex101

所示

就像@SebastianProske所说的那样,没有理由让 (?<!_)\([^\(]*\) # ^ negative lookbehind贪婪:因为它永远不会与结束括号相匹配。所以我贪得无厌。

答案 1 :(得分:1)

添加否定的lookbehind:(?<!_)检查你所说的内容( no“_”在之前)。

还有一句话:两个括号之间的内容应该是任何序列 除了关闭之外的其他字符。

所以整个正则表达式应该是:

(?<!_)\([^\)]*\)