#coding: utf-8
oldStr = "1000\t1112\n"
newStr = oldStr
t=newStr.index("\t")
newStr = newStr.lstrip(newStr[0:t])
]newStr = newStr.lstrip("\t")
newStr = newStr.rstrip("\n")
if int(newStr)>1000:
print 'ok'
else:
print 'sorry'
可正常显示结果“OK”。
现在想省中间一步,将.lstrip(newStr[0:t]) 与 newStr.lstrip("\t")合并:
#coding: utf-8
oldStr = "1000\t1112\n"
newStr = oldStr
t=newStr.index("\t")
newStr = newStr.lstrip(newStr[0:t+1])
newStr = newStr.rstrip("\n")
if int(newStr)>1000:
print 'ok'
else:
print 'sorry'
结果显示为:sorry。很明显在t 变为t+1的时候,lstrip()不仅仅删除了\t.
在命令行一行一行搜查,结果如下:
字符串切割显示没错,但是一调用lstrip()就得不到想要的结果,这是为什么呢?
8 个解决方案
#1
#coding: utf-8
oldStr = "1000\t1112\n"
newStr = oldStr
t=newStr.index("\t")
newStr=newStr.lstrip(newStr[0:t])
newStr = newStr.rstrip("\n")
if int(newStr)>1000:
print 'ok'
else:
print 'sorry'
#2
看你折腾的这么辛苦:
一句话描述:取\t开始的后续字符串,去掉前导\t,去掉后续\n
#coding: utf-8
oldStr = "1000\t1112\n"
newStr = oldStr[oldStr.index('\t'):].lstrip('\t').rstrip('\n')
if int(newStr)>1000:
print 'ok'
else:
print 'sorry'
一句话描述:取\t开始的后续字符串,去掉前导\t,去掉后续\n
#3
感谢@似梦飞花 给我的启发。这个问题事实上玄机在于“\t”. lstrip()在调用时是可以识别转义字符的,“\t”作为字符串的一个元素只占一个位置,但是转义后占了四个位置,于是“\t1112”被删掉前四格只剩下了“2”,可见python中Tab要小心使用。测试过程如下:
谢谢@ehes73 的简洁解决方案,速度加快了0.1秒,向你学习!
谢谢@ehes73 的简洁解决方案,速度加快了0.1秒,向你学习!
#4
好像还有点小问题,为什么@ehes73 的解释不存在转义占位的问题?
#5
糊涂了,根本就是strip()函数用错了,跟转义没关系。大家不要被误导。
#6
拿了楼主10分,既然还有疑问,那就要对得起你这10分,帮忙帮到底:
一、问题出在你对lstrip的理解上
先看看 Python的lstrip文档
Return a copy of the string with leading characters removed. The chars argument is a string specifying the set of characters to be removed. If omitted or None, the chars argument defaults to removing whitespace. The chars argument is not a prefix; rather, all combinations of its values are stripped
翻译就免了,重点是:
1、chars是一个集合,字符的集合
2、chars不是一个前缀,而是所有包含在chars中的都会被移除(直至第一个不在chars中的字符-我的补充)
现在看看下面的例子
应该能清晰看到lstrip的功能了,再来看楼主的例子:
至此,应该完全清楚问题在哪了吧!
二、误导1
三、误导2
哪来的文档?其中的“位于”害死人了
一、问题出在你对lstrip的理解上
先看看 Python的lstrip文档
Return a copy of the string with leading characters removed. The chars argument is a string specifying the set of characters to be removed. If omitted or None, the chars argument defaults to removing whitespace. The chars argument is not a prefix; rather, all combinations of its values are stripped
翻译就免了,重点是:
1、chars是一个集合,字符的集合
2、chars不是一个前缀,而是所有包含在chars中的都会被移除(直至第一个不在chars中的字符-我的补充)
现在看看下面的例子
"1000\t1112\n".lstrip("1") # "000\t1112\n"
"1000\t1112\n".lstrip("0") # "1000\t1112\n"
"1000\t1112\n".lstrip("10") # "\t1112\n"
"1000\t1112\n".lstrip("10\t") # "2\n"
"1000\t1112\n".lstrip("1000\t") # "2\n"
应该能清晰看到lstrip的功能了,再来看楼主的例子:
oldStr = "1000\t1112\n"
newStr = oldStr
t=newStr.index("\t") # t : 4
# newStr = newStr.lstrip(newStr[0:t+1]) # 将这一行分解为下面两行
temp = newStr[0:t+1] # temp: '1000\t'
newStr = newStr.lstrip(temp) # newStr: '2\n'
newStr = newStr.rstrip("\n") # newStr: '2'
至此,应该完全清楚问题在哪了吧!
二、误导1
三、误导2
哪来的文档?其中的“位于”害死人了
#7
已经被楼上震惊了,谢@ehes73 这么严谨地答疑解惑。“直至第一个不在chars中的字符”是此贴精髓,至此完全明白了。
#8
太赞了! @ehes73
#1
#coding: utf-8
oldStr = "1000\t1112\n"
newStr = oldStr
t=newStr.index("\t")
newStr=newStr.lstrip(newStr[0:t])
newStr = newStr.rstrip("\n")
if int(newStr)>1000:
print 'ok'
else:
print 'sorry'
#2
看你折腾的这么辛苦:
一句话描述:取\t开始的后续字符串,去掉前导\t,去掉后续\n
#coding: utf-8
oldStr = "1000\t1112\n"
newStr = oldStr[oldStr.index('\t'):].lstrip('\t').rstrip('\n')
if int(newStr)>1000:
print 'ok'
else:
print 'sorry'
一句话描述:取\t开始的后续字符串,去掉前导\t,去掉后续\n
#3
感谢@似梦飞花 给我的启发。这个问题事实上玄机在于“\t”. lstrip()在调用时是可以识别转义字符的,“\t”作为字符串的一个元素只占一个位置,但是转义后占了四个位置,于是“\t1112”被删掉前四格只剩下了“2”,可见python中Tab要小心使用。测试过程如下:
谢谢@ehes73 的简洁解决方案,速度加快了0.1秒,向你学习!
谢谢@ehes73 的简洁解决方案,速度加快了0.1秒,向你学习!
#4
好像还有点小问题,为什么@ehes73 的解释不存在转义占位的问题?
#5
糊涂了,根本就是strip()函数用错了,跟转义没关系。大家不要被误导。
#6
拿了楼主10分,既然还有疑问,那就要对得起你这10分,帮忙帮到底:
一、问题出在你对lstrip的理解上
先看看 Python的lstrip文档
Return a copy of the string with leading characters removed. The chars argument is a string specifying the set of characters to be removed. If omitted or None, the chars argument defaults to removing whitespace. The chars argument is not a prefix; rather, all combinations of its values are stripped
翻译就免了,重点是:
1、chars是一个集合,字符的集合
2、chars不是一个前缀,而是所有包含在chars中的都会被移除(直至第一个不在chars中的字符-我的补充)
现在看看下面的例子
应该能清晰看到lstrip的功能了,再来看楼主的例子:
至此,应该完全清楚问题在哪了吧!
二、误导1
三、误导2
哪来的文档?其中的“位于”害死人了
一、问题出在你对lstrip的理解上
先看看 Python的lstrip文档
Return a copy of the string with leading characters removed. The chars argument is a string specifying the set of characters to be removed. If omitted or None, the chars argument defaults to removing whitespace. The chars argument is not a prefix; rather, all combinations of its values are stripped
翻译就免了,重点是:
1、chars是一个集合,字符的集合
2、chars不是一个前缀,而是所有包含在chars中的都会被移除(直至第一个不在chars中的字符-我的补充)
现在看看下面的例子
"1000\t1112\n".lstrip("1") # "000\t1112\n"
"1000\t1112\n".lstrip("0") # "1000\t1112\n"
"1000\t1112\n".lstrip("10") # "\t1112\n"
"1000\t1112\n".lstrip("10\t") # "2\n"
"1000\t1112\n".lstrip("1000\t") # "2\n"
应该能清晰看到lstrip的功能了,再来看楼主的例子:
oldStr = "1000\t1112\n"
newStr = oldStr
t=newStr.index("\t") # t : 4
# newStr = newStr.lstrip(newStr[0:t+1]) # 将这一行分解为下面两行
temp = newStr[0:t+1] # temp: '1000\t'
newStr = newStr.lstrip(temp) # newStr: '2\n'
newStr = newStr.rstrip("\n") # newStr: '2'
至此,应该完全清楚问题在哪了吧!
二、误导1
三、误导2
哪来的文档?其中的“位于”害死人了
#7
已经被楼上震惊了,谢@ehes73 这么严谨地答疑解惑。“直至第一个不在chars中的字符”是此贴精髓,至此完全明白了。
#8
太赞了! @ehes73