在Python正则表达式中,与正向前瞻断言匹配的whitesape如何出现在最终匹配的字符串中?

在Python正则表达式中,与正向前瞻断言匹配的whitesape如何出现在最终匹配的字符串中?,python,regex,lookahead,Python,Regex,Lookahead,为了回答这个问题,我创建了这个Python正则表达式来匹配任何egg子字符串,后跟一个不属于URL的数字,前面是http://: >>> r = re.compile('(?:\s(?!http://\S*))egg\d') 然后我将其应用于以下字符串: >>> a = "a egg1 http://egg2.com egg3 http://www.egg4.org egg5" 结果是: >>> r.findall(a) [' egg1'

为了回答这个问题,我创建了这个Python正则表达式来匹配任何
egg
子字符串,后跟一个不属于URL的数字,前面是
http://

>>> r = re.compile('(?:\s(?!http://\S*))egg\d')
然后我将其应用于以下字符串:

>>> a = "a egg1 http://egg2.com egg3 http://www.egg4.org egg5"
结果是:

>>> r.findall(a)
[' egg1', ' egg3', ' egg5']
正则表达式对于许多其他问题都不正确,但还有一个问题需要解决:为什么结果中会出现空白?既然我使用了像
(?:\s…)
这样的前瞻性断言,它不应该从结果字符串中去掉吗?

(?:…)
不是前瞻性断言,它只是一个非捕获的paren对(即,内部子正则表达式匹配的内容不会进入它自己的组中,它只是为了优先而存在)<代码>(?=…)是一个前瞻性断言

(?:
不是前瞻,而是非捕获组。因此,它不创建自己的捕获,但它是完全匹配的一部分