1

これは今の私のコードです、

import re
matches = re.search(r'^%s\s*\((.*?)\)'%"Hello", "Hello(Hi())")
print matches.group(1)

Helloが表示された後、すべてを角かっこで囲みます。たとえば、

Hello(hi) produces hi

私は1つの問題を抱えています、

Hello(Hi())   produces Hi( and not Hi()

正規表現を変更してこの問題を修正する方法を知っている人はいますか?

4

2 に答える 2

3

気になるのが最も外側の括弧内にあるものだけである場合は、$アンカーを使用します。

>>> re.match("Hello\((.*)\)$", "Hello(Hi())").group(1)
'Hi()'
>>> re.match("Hello\((.*)\)$", "Hello(Hi(Bye()))").group(1)
'Hi(Bye())'

ネストされた括弧を一致させたい場合、REではそれは不可能です。これは、言語が文脈自由であるが通常ではないためです。代わりに、正規表現の一致の結果に正規表現を繰り返し適用できます。

于 2012-05-19T20:37:07.377 に答える
1

任意のレベルのネストが存在する可能性がある場合、正規表現は不適切です。

ネストのレベルが2つを超えることはないと確信できる場合は、解決できますが、快適ではありません。

re.match(r'^%s\s*\(((?:[^()]*|\([^)]*\))*)\)' % re.escape("Hello"), text)

オンラインで動作することを確認してください:ideone

于 2012-05-19T20:32:18.833 に答える