python - Python 中两个非常接近的带有前瞻断言的正则表达式 - 为什么 re.split() 的行为不同?

标签 python regex regex-lookarounds

我试图回答 this question其中 OP 具​​有以下字符串:

"path:bte00250 Alanine, aspartate and glutamate metabolism path:bte00330 Arginine and proline metabolism"

并希望将其拆分以获得以下列表:

['path:bte00250 Alanine, aspartate and glutamate metabolism', 'path:bte00330 Arginine and proline metabolism']

我尝试通过在正则表达式 (?=path:) 中使用简单的前瞻断言来解决这个问题。好吧,它不起作用:

>>> s = "path:bte00250 Alanine, aspartate and glutamate metabolism path:bte00330 Arginine and proline metabolism"
>>> r = re.compile('(?=path:)')
>>> r.split(s)
['path:bte00250 Alanine, aspartate and glutamate metabolism path:bte00330 Arginine and proline metabolism']

但是,在 this answer ,回答者通过在先行断言前面添加一个空格来使其工作:

>>> line = 'path:bte00250 Alanine, aspartate and glutamate metabolism path:bte00330 Arginine and proline metabolism'
>>> re.split(' (?=path:)', line)
['path:bte00250 Alanine, aspartate and glutamate metabolism', 'path:bte00330 Arginine and proline metabolism']

为什么正则表达式适用于空白?为什么没有空格就不起作用?

最佳答案

Python 的 re.split() 有一个 documented limitation :它不能在零长度匹配上分割。因此,分割仅适用于增加的空间。

关于python - Python 中两个非常接近的带有前瞻断言的正则表达式 - 为什么 re.split() 的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6712855/

相关文章:

python - 是否有等效的方法从 XML 加载 GMenu?

python - 在 View 中使用 tastypie 资源

python - 在 python 2.7 中使 python 脚本可执行

Java正则表达式替换除少数字符组合之外的所有字符

java - 用正则表达式测试字符串?

python - 使用正则表达式从 PDF 原始文本中提取子字符串

python - 在 Python 中没有排序函数的情况下对 dict 值进行排序

连接正则表达式对象的 Pythonic 方法

java - 正则表达式捕获其间重复组数量未知的文本

Python,递归应用正则表达式负向前瞻