0

私が今持っている正規表現は次のとおりです。

string="hello (fdd()()()()(()(())()))"
re.match("%s\s*\((.*?)\)$"%re.escape("hello"), string)

そして、それはうまく機能します。その目標は、括弧内にあるものをすべて取得することです。この場合:"fdd()()()()(()(())())"

変更を加えたいのですが、正規表現はこのテスト ケースで動作するはずです

"hello (hihihi(((())))hihi) { "

最後に中かっこがあります。指定された文字列の末尾には常に中かっこが必要であるため、最初に示したテスト ケースは機能しなくなります (必要な新しい正規表現では)。

こんな感じで見てみる

hello[any amount of space]([get WHATEVER is inside here])[any amount of space]{[any amount of space]

ドル記号の使用が問題の原因だと思います。私は明らかに正規表現の使用にあまり慣れていないので、誰かが私を助けることができればそれは素晴らしいことです. 私は、他のpythonモジュール、組み込みのpython文字列機能などを含むがこれらに限定されないあらゆるソリューションを受け入れています。

ご協力いただきありがとうございます、

4

2 に答える 2

1

私はあなたがちょうど使用できると思います"hello\s*\((.+)\)\s*{"

import re

text = "hello (hihihi(((())))hihi) { "
print re.match(r'hello\s*\((.+)\)\s*{', text).group(1)

私にくれます

hihihi(((())))hihi

?と は必要ありません$

于 2012-07-06T21:56:22.330 に答える
1

正規表現を次のように変更してみてください。

r"%s\s*\((.*?)\)\s*{" % re.escape("hello")

ここでの唯一の違いは、$が に置き換えられたことです。\s*{これは、任意の量の空白の後に{.

例:

>>> s = "hello (hihihi(((())))hihi) { "
>>> print re.match(r"%s\s*\((.*?)\)\s*{" % re.escape("hello"), s).group(1)
hihihi(((())))hihi
于 2012-07-06T21:57:06.810 に答える