去掉 ”。”和字符串中的“ \”

时间:2019-10-04 00:49:13

标签: python python-3.x

我的项目是使用gspread模块从Google表格中捕获日志编号。但是现在的问题是捕获的日志号采用字符串“。\ 1300”的形式。我只想要字符串中的数字,但无法使用下面的代码将其删除。

尝试使用.replace()函数将“ \”替换为“”,但失败。

a='.\1362'
a.replace('\\',"")

应获取不带符号的字符串“ 1362”。 但是获得的结果是“。^ 2”

4 个答案:

答案 0 :(得分:2)

问题在于\136具有特殊含义(类似于\n用于换行符,\t用于制表符,等等)。貌似它代表^

查看以下示例:

a = '.\1362'
a = a.replace('\\',"")
print(a)

b = r'.\1362'
b = b.replace('\\',"")
print(b)

生产

.^2
.\1362

现在,如果您的Google表格模块发送的是.\1362而不是.\\1362,则很有可能是因为您实际上应该收到.^2。或者,您的字符编码可能会出现问题。

我在r变量上加上的b修饰符表示原始字符串,这意味着Python不会解释反冲,而不会留下您的字符串。这仅在手动键入字符串时才真正有用,但是您可以尝试:

a = r'{}'.format(yourStringFromGoogle)

编辑:如注释中所指出,原始代码实际上确实丢弃了.replace()方法的结果。我已经更新了代码,但是请注意,字符串插值问题仍然相同。

答案 1 :(得分:1)

当您执行a='.\1362'时,a将只有三个字节:

a = '.\1362'`
print(len(a))  # => 3

这是因为\132代表一个字符。如果要创建一个带有点,斜杠和数字1362的六字节字符串,则需要转义反斜杠或创建原始字符串:

a = r'.\1362'
print(len(a))  # => 6

无论哪种情况,在字符串上调用replace都不会替换该字符串中的字符a仍将是调用replace之前的状态。相反,replace返回一个 new 字符串:

a = r'.\1362'
b = a.replace('\\', '')
print(a)  # => .\1362
print(b)  # => .1362

因此,如果要替换字符,则可以调用replace,但是必须将结果保存到新变量中或覆盖旧变量。

有关更多信息,请参见python官方文档中的String and Bytes literals

答案 2 :(得分:0)

您的字符串应包含2个反斜杠,例如.\\1362或使用r'.\1362'(将字符串声明为原始字符串,然后在编译时将其转换为普通字符串)。如果只有一个反斜杠,Python将理解您所看到的\136的意思是^(ref:link

答案 3 :(得分:0)

这里发生的是由于反斜杠\1362被编码为^2,因此您需要在使用字符串之前先对其进行处理,您可以这样做

a = r'{}'.format(rawInputString)

或者如果您使用的是python3.6 +,则可以

a = rf'{rawInputString}'
相关问题