一个小的scanf实现

scanf的Python项目详细描述


scanf:python的一个小型scanf实现

python有强大的正则表达式,但它们完全可以 在很多简单的情况下都是杀伤力过剩。另外,一些常见的 数字格式需要相当复杂的正则表达式来匹配它们 很强壮。scanf的python实现在内部转换了 将scanf格式转换为正则表达式,然后返回解析的值。

用法

scanf.scanf(格式,s=none,collapsewhitespace=true)

参数

  • 格式:这是由纯文本和 下表。
  • s:要分析的字符串
  • collapsewhitespace:为真时,告诉scanf执行贪婪匹配 输入字符串中的空白,允许轻松解析 被格式化为更容易阅读。这样可以在日志文件中更好地匹配 已格式化以便于阅读。这些案子有变数 列之间的空白量,取决于 数据本身中的字符。

scanf支持以下格式:

PatternMeaning
%cOne character
%5c5 characters
%d, %iint value
%7d, %7iint value with length 7
%ffloat value
%ooctal value
%X, %xhex value
%sstring terminated by whitespace

任何在%(e.g.,'%*f')后带有*的模式都将导致scanf与模式匹配,但是 从结果中省略匹配部分。这有助于 输入字符串可能会更改,但应忽略。

底层regex操作是使用“search”而不是“match”执行的, 因此,如果模式字符串与行中的任何位置匹配,scanf将返回匹配。

示例:

>>> from scanf import scanf
>>> scanf("%s - %d errors, %d warnings", "/usr/sbin/sendmail - 0 errors, 4 warnings")
('/usr/sbin/sendmail', 0, 4)

>>> scanf("%o %x %d", "0123 0x123 123")
(83, 291, 123)

>>> pattern = 'Power: %f [%], %s, Stemp: %f'
>>> text = 'Power:   0.0 [%], Cool, Stemp: 23.73'
>>> scanf(pattern, text)
(0.0, 'Cool', 23.73)

>>> pattern = 'Power: %f [%], %*s, Stemp: %f'   # note the '*' in %*s
>>> scanf(pattern, text)
(0.0, 23.73)

如果输入模式匹配,scanf将返回解析值的元组;如果格式不匹配,则返回none。

其他资源

有关详细信息,请参见:

原始(1.0以前版本)代码来自: http://code.activestate.com/recipes/502213-simple-scanf-implementation/

释放量

1.5.1:2018-10-04

  • 已修复安装问题

1.5.1:2018-10-04

  • 通过backports.functools_lru_缓存重新添加了Python2.7兼容性(感谢@eendebakpt!)

1.5:2018-10-01

  • 修正了python 3.7的兼容性(由于re.sub中的差异,scanf_compile在3.7中中断)
  • 已将缓存更改为functools.lru_缓存(在Python3标准库中)
  • 放弃对python 2的支持,因为lru缓存不在python 2标准库中
  • 缓存现在考虑了collapsewhitespace(谢谢@prittenhouse!)

1.4.1:2017-04-05

  • 在“scanf_compile”中将$^字符添加到要转义的特殊字符列表中。谢谢@michaelwedel!

1.4:2016-12-03

  • 对scanf.py进行了小修改,以增强python3的兼容性。谢谢@gattocrucco!
  • 将readme.md更改为readme.rst,删除setup.py中的pypandoc依赖项
  • 删除了scanf.py开头的大部分评论,因为它们是 与自述文件中的内容无关。

1.3.1-1.3.3:2016-06-23

  • PYPI的初始版本
  • 修复了pypi元数据的各种问题

1.3:2016-01-18

  • 添加了“ExtractData”函数。

1.2:2013-05-30

  • 添加了“collapsewhitespace”标志(默认为true)以进行搜索 字符串并用regex字符串替换所有空格以匹配重复的 空白。这样可以在日志文件中更好地匹配 已格式化以便于阅读。这些案子有变数 列之间的空白量,取决于 数据本身中的字符。

1.1:2010-10-13

  • 将regex从“match”(仅在行首匹配)更改为 “搜索”(匹配行中的任何位置)
  • 错误修复-忽略跳过字段的强制转换

1.0:2010-10-11

  • 初始版本(内部)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
google chrome我在哪里可以下载Mac OSX Lion的Java 6?   java管道化hadoop映射减少作业   java避免在使用jsoup解析html时删除空格和换行符   java将arrayList中的元素相互比较   如何创建一个计算一组数字之和的程序(Java)?   java JavaFX 8 JVM在退出后保留   升华文本3升华文本3 Java交互控制台?   JAVAutil。扫描仪和维基百科   java Android在RecyclerView中更新TextClock的时间格式(12/24小时格式)   java集合,如果达到限制,则可以在添加新项之前删除旧项   hex Java将十六进制转换为带符号的8位代码   java如何使用SQL中其他列的数据?   java如何确保返回指定类型的列表?   列出如何在java中声明匿名arraylist?   在JavaSpringBoot中使用RESTXML文件   使用Java在ColdFusion中计算HMACSHA256摘要的加密