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

你不需要?and $

于 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 回答