一个小的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第三方库


热门话题
另一个布局上的java Access文本视图   安卓在Java中,我什么时候应该用*导入整个包,而不是从包中导入单个对象?   JavaSpringMVC:请解释@RequestParam和@ModelAttribute之间的区别   java Flyway Ant构建未迁移   java“没有可供下载的文件”   如何解决java静态名称冲突?   我是否需要框架来补充JavaEE6、JSF2 WebApp?哪一个?   java如何传递HttpServletRequest参数?   只有java的视频不会播放声音。为什么?   java在Maven3中做这样的属性重写工作吗?   java计算Android中两个标记之间的距离   Javascript页面加载中的java复选框持久性问题   java序列化lambda函数的映射   java使用jersey、maven和eclipse配置swagger   java我可以在oncreate方法之外使用setContentView吗?   java在使用JAXRS响应类返回实体时遇到异常   java规范了加密和解密文本的文本编写方法   java如何更改ChoiceBox的默认大小?   java在Android上暂时禁用PIN/密码锁