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

问题描述:

我试图让比赛但我有与语法的麻烦,下面我使用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”。

在此先感谢。

使用积极前瞻:

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

谢谢@phihag,这似乎工作! – codecraig

+0

@codecraig - 如果它适合你,请不要忘记接受答案。 –

+1

@Justin Morgan - 我知道,它告诉我我必须等6分钟才能接受,所以我在浏览器中打开了一个标签,提醒我回来(我现在有:) – codecraig

为什么你需要一个正则表达式?简单地做一个分割上%22

>>> input.split("%22") 
['foo', 'somedata%2Bgoeshere', 'testbarbaz'] 

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

+0

所以我提到我的代码片段在问题是用Python编写的,但我真正需要的只是正确的正则表达式。 @ phihag的答案适合我。 – codecraig

这是我拿

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

重要的是你限制.*?,使之尽快停止,因为它可以匹配闭幕“%22”。

+0

+1:看起来正是OP想要达到的目标(我记得在发现'。*?'之前自己也有同样的问题) – Steven