我的项目是使用gspread模块从Google表格中捕获日志编号。但是现在的问题是捕获的日志号采用字符串“。\ 1300”的形式。我只想要字符串中的数字,但无法使用下面的代码将其删除。
尝试使用.replace()函数将“ \”替换为“”,但失败。
a='.\1362'
a.replace('\\',"")
应获取不带符号的字符串“ 1362”。 但是获得的结果是“。^ 2”
答案 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}'