Python 中的 sscanf() 函数

文章目录

    • Python 中的 sscanf() 功能
    • 使用 re 库中的正则表达式
      • 使用Neuron库


函数 sscanf() 来自编程语言 C 和 C++。 虽然 Python 没有为此方法提供任何完全等效的方法或库,但可能有其他方法来执行此功能。

这篇 Python 文章将使您更好地理解 sscanf() 必须提供什么以及我们如何在 Python 脚本中模仿它。


Python 中的 sscanf() 功能

sscanf() 方法从已提供的字符串中提取字符串。 这就是我们声明方法的方式:

int sscanf(const char *str, const char *format, ...)

此方法实质上将从字符串中读取格式化输入,并且与 scanf() 不同,sscanf() 的数据是从字符串而不是控制台中读取的。 数据从缓冲区读取到方法声明中作为参数提供的位置地址。

提供的每个参数都指向一个与格式字符串具有相同类型的变量。 该方法返回已成功转换和分配的值。

Python 本身没有 sscanf() 的直接等效库或模块。 但是,有两种方法可以模拟该功能。


使用 re 库中的正则表达式

正则表达式有助于指定字符串的格式或描述字符串的格式,然后可用于验证不同的字符串。 正则表达式可以包含特殊字符和普通字符。

像 A、B、b 或 0 这样的字符是表达式中最简单的普通字符的好例子。 该库还可以按特定顺序搜索字符串或字符列表中的特定字符。

查看下面的示例脚本,它在提供的字符串中搜索字符串 def。

示例代码:

import re
m = re.search('(?<=abc)def', 'abcdef')
m.group(0)

该程序返回 def 作为输出。

也可以在由特殊字符分隔的字符串中搜索字符串。 例如,在下面的脚本中,我们搜索连字符后提供的单词:

示例代码:

m = re.search(r'(?<=-)\w+', 'spam-emails')
m.group(0)

其输出是电子邮件。 用 re 解析的可能性是无穷无尽的!

另一个类似于 re 的库是 regex,它是 API 友好的。 Regex 向后兼容 re 并带有附加功能。

以下是使用正则表达式模块实现的条件模式测试。 当然,我们需要在执行之前导入库。

示例代码:

>>> regex.match(r'(?(?=\d)\d+|\w+)', '123abc')
<regex.Match object; span=(0, 3), match='123'>
>>> regex.match(r'(?(?=\d)\d+|\w+)', 'abc123')
<regex.Match object; span=(0, 6), match='abc123'>

使用Neuron库

Neuron库(不是来自 Python 本身)也可用于在 Python 脚本中导入 sscanf()。 例如,如果我们要运行以下脚本,

from neuron import h
x = h.ref(0)
h.sscanf('0.3', '%f', x)
print(x[0])

结果输出为 0.300000011921

这里有更多示例,我们可以通过神经元库了解 Python 中 sscanf() 的使用,并将每一行的输出添加为注释。

示例代码:

from neuron import h as hoc
string = hoc.ref('')
range_list = [hoc.ref(0) for i in range(50)]
hoc.sscanf("This is a test\n", "%s", string)
print(string[0])
hoc.sscanf("This is a test\n", "%[^\n]", string)
print(string[0])
hoc.sscanf("This is a test\n", "%*s%s", string)
print(string[0])
hoc.sscanf("1 2 3 4 5 6 7 8 9 10",
           "%f%f%f%f%f%f%f%f%f%f%f",
           range_list[0], range_list[1], range_list[2], range_list[3], range_list[4], range_list[5], range_list[6],
           range_list[7], range_list[8], range_list[9], range_list[10], range_list[11], range_list[12])
print('Should only have non-zero values for range_list indices 0 - 9')
for i in range(13):
    print('%d %g' % (i, range_list[i][0]))

从上述两个选项中可以看出,我们可以根据情况使用任一库。 Python 是一种功能广泛、类型快速且美观的语言,它为我们提供了广泛的选项来以 Python 通常独有的方式解析字符串。

re 和 regex 库是语言 vastness 的例子。

我们希望您发现本文有助于理解 Python 中使用的 sscanf() 函数的基本概念。

你可能感兴趣的:(Python,实用技巧,python,开发语言)