0

为了回答这个问题,我创建了这个 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...),不应该从结果字符串中取出它吗?

4

2 回答 2

1

(?:...)不是先行断言,它只是一对非捕获的括号(即,内部子正则表达式匹配的内容不会进入其自己的组,它只存在于优先级)。(?=...)是一个前瞻断言。

于 2011-07-28T15:24:11.753 回答
1

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

于 2011-07-28T15:24:18.830 回答