从带有反斜杠的字符串中提取数字

问题描述 投票:0回答:2

我需要从以下格式的字符串中提取数字:“183 8”。我试过:

st = '183\118\40'
re.findall(r"[-+]?(?:\d*\.\d+|\d+)", st)

输出:['183','8']

st.split('\\')

输出:['183 8']

python string numbers backslash
2个回答
1
投票

您混淆了字符串的表示形式和字符串的内容。字符串

'183\118\40'
包含 6 个字符,其中没有一个反斜杠。 “”是八进制字符常量。八进制 11 是十进制的 9,即制表符。 “”也是一个八进制字符常量。八进制 40 是十进制 32,即空格。

如果您确实想要该文字字符串,则需要以下之一:

st = '183\\118\\40'
st = r'183\118\40'

请注意,这种情况只会发生,因为您已将其输入为 Python 字符串常量。如果您从文件中读取该行,它将正常工作。


0
投票
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]
© www.soinside.com 2019 - 2024. All rights reserved.