为什么 Python 的 `re.split()` 不在零长度匹配上进行分割?

2024-02-12

一个特别的怪癖(否则相当强大)rePython中的模块是re.split() 永远不会在零长度匹配上分割字符串 http://docs.python.org/library/re.html#re.split,例如,如果我想沿单词边界分割字符串:

>>> re.split(r"\s+|\b", "Split along words, preserve punctuation!")
['Split', 'along', 'words,', 'preserve', 'punctuation!']

代替

['', 'Split', 'along', 'words', ',', 'preserve', 'punctuation', '!']

为什么它有这个限制呢?是设计使然吗?其他正则表达式风格是否有这样的行为?


这是一个设计决定,并且可以采取任何一种方式。蒂姆·彼得斯制作这个帖子 http://bugs.python.org/issue852532#msg19231解释:

例如,如果您按模式 x* 拆分“abc”,您会怎样做 预计?该模式在 4 个位置匹配(长度为 0), 但我敢打赌大多数人会惊讶地发现

[''、'a'、'b'、'c'、'']

回来而不是(因为他们确实得到了)

['abc']

但其他一些人不同意他的观点。吉多·范罗苏姆不想改变 http://bugs.python.org/issue3262#msg70749由于向后兼容性问题。他做到了say http://bugs.python.org/issue3262#msg73592:

不过,我可以添加一个标志来启用此行为。

Edit:

有一个解决方法 http://bugs.python.org/issue852532#msg19234扬·伯吉发表:

>>> s = "Split along words, preserve punctuation!"
>>> re.sub(r"\s+|\b", '\f', s).split('\f')
['', 'Split', 'along', 'words', ',', 'preserve', 'punctuation', '!']

Where '\f'可以用任何未使用的字符替换。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Python 的 `re.split()` 不在零长度匹配上进行分割? 的相关文章

  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • 空文件上的 AWK FNR==NR

    我正在运行以下命令 只要它们的内容在第一个文件中 该命令就可以很好地工作 awk F FNR NR a tolower 1 next a tolower 1 OutSideSyncUsers csv NewUsers csv 如果第一个文件
  • 将 ID 添加到 Google 地图标记,然后定位它[重复]

    这个问题在这里已经有答案了 我已经使用 Google Maps API v3 创建了一个 google 地图 并添加了一个自定义标记 我已经向标记构造函数添加了一个 ID 我希望使用 jQuery 以其他 JS 为目标 但目前 当我只是尝试
  • 静态链接到动态库。 glibc

    所以 我遇到一个问题 一台机器上有两个版本的 GCC 3 4 6和4 1 这是由于新软件的一些依赖性问题 需要 glibc 4 1 当我将这个新软件与 4 1 库链接时 它链接得很好 但是 当执行软件时 它找不到该库 因为它正在我的 LD
  • ExtJs 面板 - 添加动态组件

    我有一扇窗户 窗户内有面板 我动态地将组件添加到面板中 这些组件采用 hbox 布局 以便水平排列 单击按钮后 我将在 hbox 布局中向面板中添加一行类似的组件 这里的问题是我想在第一行下方添加第二行 但以下代码将组件添加到面板的顶部 p
  • Symfony2 Doctrine 查询生成器作为 FROM 子句中的子查询

    我使用查询生成器得到了一个查询 并将其分配给 qb多变的 它在 PHP 和数据库中都可以正常工作 现在 我尝试将该查询用作子查询 如下所示 subQuery qb gt getQuery gt getSql query select res
  • 如何调试 Linux 内核模块的 init_module() 调用?

    我正在迈出 Linux 内核开发的第一步 我有一些代码生成 ko我安装的内核模块insmod 我想要一种方法来调试安装模块时发生的情况 但我遇到了一些困难 我需要调试调用init module 当我运行时这个函数被调用吗insmode 我尝
  • UPI Deep Link 付款被拒绝

    我不知道在哪里问这个问题是否合适 而是我不知道在哪里问这个问题 我正在flutter中开发一个应用程序 对于应用程序内购买我正在尝试实现UPI支付 我也有一些插件可以做到这一点 但是当我测试时 我的交易被拒绝 我正在尝试通过应用程序中的 P
  • 具有多个模板参数的 C++ 概念

    Bjarne Stroustrup 最近发表了report http www stroustrup com good concepts pdf在 C 概念 中 他提到了一些让我感到惊讶的事情 该示例 第 7 1 节中 使用 速记模板表示法
  • MySQL 基于游标的多列分页

    我有一些表想要使用基于游标的分页进行查询 但它需要应用于多个列 让我们举一个使用 2 列的简化示例 我像这样获取第一页 SELECT column 1 column 2 FROM table name ORDER BY column 1 c
  • 一种唯一标识 BTLE 设备的方法

    有没有办法唯一地标识 BTLE 设备 类似于硬件 ID 我有 2 个硬件 BTLE 设备和 2 个软 BTLE 设备 使用 CBCentralManager 所有这些设备都发送相同的 UUID 当所有设备都位于我附近时 我想识别确切的 BT
  • 如何使用 jq 将当前日期和时间附加到现有 json 文件中

    我有以下格式的 json 文件 username achu password test1234 我只想将时间戳添加到上述有效负载中并将其作为某些服务的请求发送 据我所知 下面的命令将帮助我们获取 Linux 上的当前标记 date r 但不
  • 从脚本内获取 Swift 脚本的路径

    我正在用 Swift 编写一个脚本 我希望它修改一些始终与脚本本身位于同一目录中的文件 有没有办法从脚本内部获取脚本的路径 我试过 print Process arguments 但这仅输出实际提供给脚本的路径 该路径可能是完全解析的路径
  • 有没有办法使用http将打印任务发送到支持IPP的网络打印机?

    我正在开发一个 Android 打印服务应用程序 该应用程序应该允许用户执行以下操作 浏览手机的内部存储并将所选文件发送到支持 IPP 的打印机进行打印 这几天上网查了一下 只找到一个解决办法 如何在android中使用ipp 互联网打印协
  • Firefox 网络面板中的彩色条代表什么?

    在 Firefox 开发者工具中 在 Net 面板下 加载的资源的加载时间分为不同的颜色 类别 这些都是 DNS查询 连接中 Blocking Sending Waiting 接收 其中每一个代表什么 更具体地说 它们中的任何一个是否准确地
  • 通过 cython 将 python 字符串传递给 C

    我正在尝试编写一个包含一些 c 和一些 python 部分的模块 我正在使用 cython 来弥补差距 我想在 python 中存储我的 很长的 字符串常量 因为它有更好的语法 const char long string npart of
  • 识别常见的周期波形(方波、正弦波、锯齿波……)

    如果没有任何用户交互 程序如何识别 ADC 记录中存在什么类型的波形 对于这个问题 恒定频率的三角波 方波 正弦波 半正弦波或锯齿波 电平和频率是任意的 并且它们会有噪声 少量失真和其他缺陷 我也会提出一些 天真的 想法 你可以投票赞成或反
  • 使用 IIFE 时使用 CommonController 实例化其他 AngularJS 控制器

    我有一个项目 其中许多模型将由几乎相同的控制器代码管理 唯一的例外是它们调用不同的服务 我现在处理这个问题的方法是使用通用代码实例化一个 Crud Controller 到每个自定义控制器中 然后通过更改自定义控制器内的变量来重定向服务调用
  • 使用S3 for Rails“公共/图像”是否很好,并且有一种简单的方法可以做到这一点?

    我对 S3 有点陌生 我想知道将公共 图像放入 S3 存储桶中是否是一个好主意 如果是 是否有一种简单的方法可以进行移动 如果您查看 config environments production rb 您将看到以下代码行 已注释掉 conf
  • 如何在 iPhone 的“文件”应用程序中显示我的应用程序文档

    我正在尝试在 iPhone 上的 文件 应用中显示我的应用中的数据 查了很多资料 都对 就是不知道错在哪里 func fileManger nameFolder String let manager FileManager default
  • 为什么 Python 的 `re.split()` 不在零长度匹配上进行分割?

    一个特别的怪癖 否则相当强大 rePython中的模块是re split 永远不会在零长度匹配上分割字符串 http docs python org library re html re split 例如 如果我想沿单词边界分割字符串 gt