- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
有没有办法将 re.findall
或更好的 re.finditer
功能应用于流(即打开文件句柄以供读取)?
请注意,我不是假设要匹配的模式完全包含在一行输入中(即允许多行模式)。我也不假设最大匹配长度。
的确,在这种普遍性水平上,可以指定一个正则表达式,要求正则表达式引擎可以访问整个字符串(例如 r'(?sm).*'
),当然,这意味着必须将整个文件读入内存,但目前我不关心这种最坏的情况。毕竟,编写多行匹配正则表达式是完全可能的,不需要需要将整个文件读入内存。
是否可以从已编译的正则表达式访问底层自动机(或内部使用的任何东西),以向其提供字符流?
谢谢!
编辑:添加了关于多行模式和匹配长度的说明,以回应 Tim Pietzcker 和 rplnt 的回答。
最佳答案
如果您知道正则表达式匹配永远不会跨越换行符,这是可能的。
然后你可以简单地做
for line in file:
result = re.finditer(regex, line)
# do something...
如果匹配可以扩展到多行,则需要将整个文件读入内存。否则,您如何知道您的匹配是否已经完成,或者前面的某些内容是否会使匹配变得不可能,或者匹配是否只是因为文件读取不够远而失败?
编辑:
理论上是可以的。正则表达式引擎必须在匹配尝试期间的任何时候检查它是否到达流的当前读取部分的末尾,如果到达,则继续读取(可能直到 EOF)。但是 Python 引擎不会这样做。
编辑 2:
我查看了 Python stdlib 的 re.py
及其相关模块。正则表达式对象的实际生成,包括其 .match()
方法和其他方法是在 C 扩展中完成的。因此,除非您直接编辑 C 源代码并构建您自己的 Python 版本,否则您无法访问它并对其进行 monkeypatch 以处理流。
关于python - 流中的 findall/finditer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9769504/
如何通过特定条件获取值,然后使用这些选定元素从其他事实系列中获取值? 我有这个代码 %code, date, amount values1('AAA', date(02, 03, 2020), 100
我是 Python 的新手,主要需要它来从网站获取信息。在这里,我试图从网站底部获取简短的标题,但无法完全获取。 from bfs4 import BeautifulSoup import reque
我不断收到错误“缺少 1 个必需的位置参数:'section_url'” 每次我尝试使用 findall 时都会收到此错误。 刚开始学习 python,因此我们将不胜感激! from bs4 impo
我有这张 table 。客户有项目,用户在项目中工作 Clients - id - name Projects - id - name - client_id Users - id - name Us
嗨,我是 Python 和 Beautiful 汤的新手。我试图仅从表格的某个部分获取文本。但似乎 findAll 的结果不是我可以再次运行 findAll 的 BeautifulSoup 类型。 s
登录 @ApiModel @Entity public class Login { @Id @GeneratedValue(strategy = GenerationType.AUTO
登录 @ApiModel @Entity public class Login { @Id @GeneratedValue(strategy = GenerationType.AUTO
有什么方法可以防止 Spring Data REST 为覆盖的存储库方法创建/search URL? 例如,以下代码会生成一个/search/findAll URL,它复制了集合资源的功能: publ
有什么方法可以防止 Spring Data REST 为覆盖的存储库方法创建/search URL? 例如,以下代码会生成一个/search/findAll URL,它复制了集合资源的功能: publ
使用 Spring Data JpaRepository 可以通过某种排序获取给定 Id 的选择集合。这意味着我需要启用以下查询。我找到了一些 solution应用@NamedQuery 但我无法启用
我正在尝试在我的 Express 应用程序中使用 Sequelize 获取数据,并使用 MSSQL 获取数据库。这是我的代码: getInstitution: function (req, res)
代码应该在请求/tasks 时返回一个带有空任务的 JSON 对象,而是返回一条消息错误 - TypeError: cannot read property 'findAll' of undefine
我的python版本是2.7.6 我知道 +? 是 + 的非贪婪版本。 这样 re.findall('(ab)+?', 'abab') 将匹配尽可能少的 ab。 结果 ['ab', 'ab'] 因此有
我正在使用 sequelize 从 mySql db 获取数据。这就是我如何使用它 const isProduct = await models.product.findAll({ where:
ItemTag对象包含一个Item对象和一个Tag对象。 (这些是Java域对象。) 这个简单的查询按预期工作。我返回一个ItemTags列表,并且可以完成ItemTags应该做的所有奇妙的事情: d
试图简单地使用find all运行域对象的查询,并且它的行为不像我期望的那样: searchResults = Contact.findAll("from Contact as c where c.c
我想使用 groovy findAll 和我的参数来过滤闭包 filterClosure = { it, param -> it.getParam == param } 我现在如何在 findAl
我扩展了 CrudRepository 来创建一个名为 TaskDao 的类。我认为 taskDao.findall() 会从数据库中提取值。由于某种原因,taskDao.findall() 实际上返
我正在开发一个 grails 应用程序,在此我必须在 list.gsp 上应用过滤器框。当我使用以下查询(在我的服务中)进行过滤时,我得到了分页列表: def clientCriteria =
我正在尝试创建一个正则表达式来查找 Perl 代码中的所有变量。 变量如下所示:$variable_test。 所以这是我使用的正则表达式: ^\$\w+$ 这给了我Python中的这一行: matc
我是一名优秀的程序员,十分优秀!