函数 sscanf()
来自编程语言 C 和 C++。 虽然 Python 没有为此方法提供任何完全等效的方法或库,但可能有其他方法来执行此功能。
这篇 Python 文章将使您更好地理解 sscanf()
必须提供什么以及我们如何在 Python 脚本中模仿它。
sscanf()
方法从已提供的字符串中提取字符串。 这就是我们声明方法的方式:
int sscanf(const char *str, const char *format, ...)
此方法实质上将从字符串中读取格式化输入,并且与 scanf()
不同,sscanf()
的数据是从字符串而不是控制台中读取的。 数据从缓冲区读取到方法声明中作为参数提供的位置地址。
提供的每个参数都指向一个与格式字符串具有相同类型的变量。 该方法返回已成功转换和分配的值。
Python 本身没有 sscanf()
的直接等效库或模块。 但是,有两种方法可以模拟该功能。
正则表达式有助于指定字符串的格式或描述字符串的格式,然后可用于验证不同的字符串。 正则表达式可以包含特殊字符和普通字符。
像 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库(不是来自 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() 函数的基本概念。