我需要从以下格式的字符串中提取数字:“183 8”。我试过:
st = '183\118\40'
re.findall(r"[-+]?(?:\d*\.\d+|\d+)", st)
输出:['183','8']
st.split('\\')
输出:['183 8']
您混淆了字符串的表示形式和字符串的内容。字符串
'183\118\40'
包含 6 个字符,其中没有一个反斜杠。 “”是八进制字符常量。八进制 11 是十进制的 9,即制表符。 “”也是一个八进制字符常量。八进制 40 是十进制 32,即空格。
如果您确实想要该文字字符串,则需要以下之一:
st = '183\\118\\40'
st = r'183\118\40'
请注意,这种情况只会发生,因为您已将其输入为 Python 字符串常量。如果您从文件中读取该行,它将正常工作。
st = '183\118\40'
print(st)
如果您尝试打印此内容,您将看到这就是输出
'183\t8 '
由于使用了反斜杠或转义字符 (
\
),这不符合您所需的格式。要解决此问题,请使用原始字符串。要将字符串转换为原始字符串,请执行以下操作
st = r'183\118\40'
如果您不想使用原始字符串,请将其另存为
st = '183\\118\\40'
如果您尝试打印此内容,您将看到这就是输出
'183\\118\\40'
如您所见,转义字符本身已通过在其后使用另一个转义字符进行转义。
现在,要从中获取所需的数值,请使用字符串操作方法 split() 和分隔符参数。像这样:
st.split("\\")
请注意,这里我们再次使用另一个反斜杠对转义字符进行转义,以将分隔符设置为文字
/
字符。
现在,
print(st)
将为您提供所需的输出,即
['183', '118', '40']
现在您已准备好进一步处理此字符串列表。
如果您想要一个整数列表,请尝试
int_list = [int(x) for x in st.split('\\')]
现在可视化输出,
>>>print(int_list)
[183, 118, 40]