为了回答this question,我创建了这个Python正则表达式,以匹配任何egg
子字符串,后跟一个不属于前面带有http://
的URL的数字:
>>> 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对(即,内部子regex匹配的内容不会进入它自己的组,它只存在于优先级中)。(?=...)
是一个先行断言。你知道吗相关问题 更多 >
编程相关推荐