Python 正则表达式——无关匹配

2023-11-21

我想使用分割字符串-, +=, ==, =, +和空格作为分隔符。我想保留分隔符,除非它是空格。

我尝试使用以下代码来实现此目的:

def tokenize(s):
  import re
  pattern = re.compile("(\-|\+\=|\=\=|\=|\+)|\s+")
  return pattern.split(s)

print(tokenize("hello-+==== =+  there"))

我预计输出是

['hello', '-', '+=', '==', '=', '=', '+', 'there']

然而我得到了

['hello', '-', '', '+=', '', '==', '', '=', '', None, '', '=', '', '+', '', None, 'there']

这几乎是我想要的,除了有很多无关的东西Nones 和空字符串。

为什么它会这样,我该如何改变它以获得我想要的?


re.split默认情况下返回匹配之间的字符串位的数组:(正如@Laurence Gonsalves 指出的,这是它的主要用途。)

['hello', '', '', '', '', '', '', '', 'there']

注意中间的空字符串- and +=, += and ==, etc.

正如文档所解释的,因为您正在使用捕获组(即,因为您正在使用(\-|\+\=|\=\=|\=|\+)代替(?:\-|\+\=|\=\=|\=|\+),捕获组匹配的位是散布的:

['hello', '-', '', '+=', '', '==', '', '=', '', None, '', '=', '', '+', '', None, 'there']

None对应于其中\s+一半的模式已匹配;在这些情况下,捕获组什么也没捕获。

从查看 re.split 的文档来看,我没有看到一种简单的方法来让它丢弃匹配之间的空字符串,尽管有一个简单的列表理解(或filter,如果你愿意的话)可以轻松丢弃Nones 和空字符串:

def tokenize(s):
  import re
  pattern = re.compile("(\-|\+\=|\=\=|\=|\+)|\s+")
  return [ x for x in pattern.split(s) if x ]

最后一点:对于您到目前为止所描述的内容,这会很好地工作,但是根据您的项目的方向,您可能需要切换到正确的解析库。Python 维基这里对一些选项有很好的概述。

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

Python 正则表达式——无关匹配 的相关文章

  • JavaScript 相当于 Python 的参数化 string.format() 函数

    这是 Python 示例 gt gt gt Coordinates latitude longitude format latitude 37 24N longitude 115 81W Coordinates 37 24N 115 81W
  • 正则表达式:括号表达式中的双反斜杠

    以下表达式中的双反斜杠匹配什么 它是一个过滤器吗 and 转义反斜杠 或 and 未转义 或 and 逃避问号 这是正则表达式的链接以及一些示例测试字符串 如在Rubular http rubular com r Jrw1G4YLtT Th
  • Kivy - 文本换行工作错误

    我正在尝试在 Kivy 1 8 0 应用程序中换行文本 当没有太多文字时 一切正常 但如果文本很长并且窗口不是很大 它只是剪切文本 这是示例代码 vbox BoxLayout orientation vertical size hint y
  • Python从int到string的快速转换

    我正在用 python 求解大量阶乘 并发现当我完成计算阶乘时 需要相同的时间才能转换为字符串以保存到文件中 我试图找到一种将 int 转换为字符串的快速方法 我将举一个计算和 int 转换时间的例子 我正在使用通用的 a str a 但感
  • 如何使用显式引用转储 YAML?

    递归引用非常适合ruamel yaml or pyyaml ruamel yaml dump ruamel yaml load A A id001 id001 然而 它 显然 不适用于普通引用 ruamel yaml dump ruamel
  • 为什么我的代码不能根据字典解码加密字符串?

    我有一本字典 其中包含代表字母的键和值 例如一个简单的 DICT CODE b g n a p o x d t y 我收到了一个加密代码 并将该字符串转换为一个列表 其中每个项目都是一个单词 我需要根据字典中的项目来解决它 代码示例是 wo
  • 如何在 PyCharm 4.5.2 中使用 PyPy 作为标准/默认解释器?

    如何在 PyCharm 4 5 2 中使用 PyPy 作为标准 默认解释器 一切都在 Ubunutu 14 10 下运行 并且 pypy 已经安装 您可以在项目的设置下进行配置 这个官方文档直接涵盖了 https www jetbrains
  • 更新 Sqlalchemy 中的多个列

    我有一个在 Flask 上运行的应用程序 并使用 sqlalchemy 与数据库交互 我想用用户指定的值更新表的列 我正在使用的查询是 def update table value1 value2 value3 query update T
  • 当单词以“|”分隔时如何读取文件(埃因霍温)?

    在Python中 我有一个文件 其中的单词由 例如 city state zipcode 我的文件阅读器无法区分单词 另外 我希望我的文件阅读器从第 2 行而不是第 1 行开始 如何让我的文件阅读器分隔单词 import os import
  • python 中的 Johansen 协整检验

    我找不到任何有关在处理统计和时间序列分析 pandas 和 statsmodel 的 Python 模块中执行 Johansen 协整检验的功能的参考 有谁知道是否有一些代码可以执行时间序列之间的协整测试 现在 这已在 Python 的 s
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • 如何使用 Django 项目设置 SQLite?

    我已阅读 Django 文档 仅供参考 https docs djangoproject com en 1 3 intro tutorial01 https docs djangoproject com en 1 3 intro tutor
  • 将文本注释到轴并对齐为圆

    我正在尝试在轴上绘制文本并将该文本与圆对齐 更准确地说 有一些具有不同坐标 x y 的点位于该圆内 并使用以下命令创建 ax scatter x y s 100 我想用圆圈连接并标记每个点 Cnameb 文本的坐标由 xp yp 定义 因此
  • Python]将两个文本文件合并为一个(逐行)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是蟒蛇新手 我想做的是将文件 a 和文件 b 逐行合并到一个文件中 例如 text file a a n b n c text fi
  • 无法在 python 3.8 上将带有 webapp 的 python 部署到 azure

    我正在尝试使用部署一个测试项目Flask使用以下方法将框架迁移到 Azure 云中Azure CLI https learn microsoft com en us azure app service containers quicksta
  • 处理大文件的最快方法?

    我有多个 3 GB 制表符分隔文件 每个文件中有 2000 万行 所有行都必须独立处理 任何两行之间没有关系 我的问题是 什么会更快 逐行阅读 with open as infile for line in infile 将文件分块读入内存
  • 如何使用 matplotlib 为圆柱体的每个单独面添加颜色

    我正在尝试为圆柱体的每个面着色 但是我不确定如何进行 我尝试了以下方法 for i in range 10 col append for i in range 10 for j in range 20 col i append plt cm
  • Python 通过从现有 csv 文件中过滤选定的行来写入新的 csv 文件

    只是一个问题 我试图将 csv 文件中的选定行写入新的 csv 文件 但出现错误 我试图读取的 test csv 文件是这样的 两列 2013 9 1 2013 10 2 2013 11 3 2013 12 4 2014 1 5 2014
  • Django 模型:如何使用 mixin 类来覆盖 django 模型以实现 save 等功能

    我想在每次保存模型之前验证值 所以 我必须重写保存函数 代码几乎是一样的 我想把它写在 mixin 类中 但失败了 我不知道如何写 super func 我英语不好 抱歉 class SyncableMixin object def sav
  • 长/宽数据到宽/长

    我有一个数据框 如下所示 import pandas as pd d decil 1 decil 1 decil 2 decil 2 decil 3 decil 3 decil kommune AA BB AA BB AA BB 2010

随机推荐

  • 使用 HtmlAgilityPack 设置 InnerText

    我尝试使用以下方法设置 InnerText 但不允许设置 InnerText 属性 node InnerText node InnerText Remove 100 原因是我只想删除文本 而不是实际元素 div Lorem ipsum do
  • 有没有办法将自然语言日期 NSString 转换为 NSDate

    假设我有 NSString tomorrow 是否有任何库可以接受这样的字符串并将它们转换为 NSDates 我想象 希望有这样的事情 NSString humanDate tomorrow at 4 15 NSDateFormatter
  • Javascript window.open 在 Win7 x64 上的 32 位 IE8 中返回 null

    我已阅读有关此主题的相关问题 但尚未找到此问题的解决方案 我有一个简单的 javascript 函数 在单击链接时调用 window open var newwindow function pop url newwindow window
  • 低级鼠标挂钩和 DirectX

    我正在构建一个需要在系统范围内过滤一些鼠标点击的应用程序 也就是说 我需要让系统在特殊场合忽略一些鼠标按钮的点击 我使用低级鼠标钩SetWindowsHookEx过滤掉这些点击 它的效果相对较好 除了WPF应用程序 我想这是因为这些应用程序
  • grid.Call(L_textBounds, as.graphicsAnnot(x$label), x$x, x$y, 中的错误:找不到多边形边缘

    我刚刚在 Mac OS X 版本 10 7 3 上安装了 RStudio 执行以下命令后 library ggplot2 qplot mpg wt data mtcars 我收到以下错误 Error in grid Call L textB
  • 如何在特定目录中安装 Bower 依赖项?

    我正在为简单的网站构建一个自耕农生成器 我想在我的脚手架中包含一个流行的 JavaScript 库 这很容易bower install
  • 在复杂对象图上使用 IXmlSerialized 接口

    如果使用自定义 XML 序列化 IXmlSerialiable 在一个复杂对象上 该对象包含具有组成复杂对象的属性 这些属性NOT使用自定义IXmlSerializable接口 你如何指定 在IXmlSerializable ReadXml
  • IBOutletCollection 的实际高效使用

    IBOutletCollection的实际用法看起来怎么样 不幸的是 苹果文档简单地提到了它 但没有给出更广泛的用法 好的 它与IB保持了一对多的关系 但是如何高效地访问和使用特定的对象呢 与标签名 如何保证对象的顺序 我最近使用它来轻松初
  • 如何将日期和时间从自然语言翻译为日期时间? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一种方法将 明天早上 6 点 或 下周一中午 翻译为适当的日期时间对象 我想过设计一套复杂的规则 但还有其他方法吗 解析日期时间 能够解析
  • 如何在 Java 中将文件读取为无符号字节?

    如何在 Java 中将文件读取为字节 需要注意的是 所有字节都必须为正数 即不能使用负数范围 这可以在 Java 中完成吗 如果可以 怎么做 我需要能够将文件的内容乘以一个常量 我假设我可以将字节读入 BigInteger 然后相乘 但是由
  • 多线程安全日志记录

    我们有一个在多个线程中运行并使用 Log4Net 作为日志记录框架的应用程序 我们遇到了一些日志事件未记录的情况 正如文档中提到的 文件附加器其他 Appender 是 not对于多线程操作是安全的 我在网上搜索解决方案或 Appender
  • 如何清除或清空 StringBuilder? [复制]

    这个问题在这里已经有答案了 我正在使用一个字符串生成器在循环和每 x 迭代中我想清空它并从一个空开始StringBuilder 但我看不到任何类似于 NET的方法StringBuilder Clear在文档中 只是delete方法看起来过于
  • Python 中 exec 和 eval 的使用

    所以我明白了什么exec and eval并且compile做 但为什么我需要使用它们呢 我不太清楚使用场景 谁能给我一些例子 以便我更好地理解这个概念 因为我知道这都是理论 我将举一个我使用过的例子eval我认为这是最好的选择 我正在编写
  • .net 中转换为短路径的标准方法

    寻找标准的防错误方法将 长名称 例如 C Documents and settings 转换为等效的 短名称 C DOCUME 1 我需要它来从我的 C 应用程序中运行外部进程 如果我用 长名称 中的路径提供它 它就会失败 如果您准备开始调
  • python 中未定义名称 exit

    以下是代码 当我运行时 我收到一条错误消息 指出 名称退出未定义 谁能告诉我为什么 非常感谢您的时间和关注 if len sys argv 4 do something pass else print usage something her
  • 将二进制转换为浮点值的计算器 - 我做错了什么?

    我有以下代码 它将 6 个浮点数以二进制形式写入磁盘并读回 include
  • 在本地计算机上使用 Jupyter Notebook 在远程计算机上运行代码

    我使用 Jupyter Notebook 来运行生物信息学分析 我喜欢它 然而 只有当我在个人计算机上运行它时 它才真正发挥得很好 不过 我经常使用具有多核的远程计算机进行分析 以减少处理时间 我希望能够在我的个人计算机上使用 Jupyte
  • Hilt 循环依赖

    我正在使用 Hilt 创建一个宠物项目 也许我遇到这个问题是因为我安装一切都在SingletonComponent class 也许我应该为每一个创建组件 宠物项目有一个NetworkModule UserPrefsModule 当我尝试创
  • Exchange Server(内部)是否支持 REST API?

    这份适用于 Exchange Server 的文档表明 大部分 API Web 服务都是基于 SOAP 的 https msdn microsoft com en us library office dd877012 v exchg 150
  • Python 正则表达式——无关匹配

    我想使用分割字符串 和空格作为分隔符 我想保留分隔符 除非它是空格 我尝试使用以下代码来实现此目的 def tokenize s import re pattern re compile s return pattern split s p