如何找到匹配排除某个字符串的任何内容?

时间:2011-08-23 14:46:52

标签: python regex

我正在尝试获得匹配但是语法有问题,下面我使用的是python,但它可以是任何语言,我只需要正确的正则表达式语法:

import re
p = re.compile('foo%22([^%22])*')

input = "foo%22somedata%2Bgoeshere%22testbarbaz"

result = re.findall(p, input)

我正在尝试提取“somedata%2Bgoeshere”。基本上我想要%22之间的东西。所以我尝试的正则表达式(上图)不是b / c,“不是”运营商说“不是%”,“不是2”,“不是2”......我想说,得到任何东西直到你看到“%22”。

提前致谢。

3 个答案:

答案 0 :(得分:4)

使用积极向前看:

>>> import re
>>> input = "foo%22somedata%2Bgoeshere%22testbarbaz"
>>> re.findall('foo%22.*?(?=%22)', input)
['foo%22somedata%2Bgoeshere']

答案 1 :(得分:4)

为什么需要正则表达式?只需在%22

上进行拆分即可
>>> input.split("%22")
['foo', 'somedata%2Bgoeshere', 'testbarbaz']

你想要的东西是任何不是返回结果的第一个和最后一个元素的东西。 KISS

答案 2 :(得分:2)

这是我的看法

mo = re.search("%22(.*?)%22", input)
print mo.groups(1)

重要的是,您将.*限制为?,以便在匹配“%22”后立即停止。