我正在構建一系列字符串的分析器。 我需要檢查每行縮進多少(通過製表符或空格)。檢查字符串縮進?
每一行只是在文本編輯器的字符串。 如何檢查字符串縮進多少?
或者說,也許我可以檢查多少空格或\噸串之前,但我不確定如何。
我正在構建一系列字符串的分析器。 我需要檢查每行縮進多少(通過製表符或空格)。檢查字符串縮進?
每一行只是在文本編輯器的字符串。 如何檢查字符串縮進多少?
或者說,也許我可以檢查多少空格或\噸串之前,但我不確定如何。
要計算的空格數在字符串的開頭,你可以做剝離左(空格去掉)字符串和原始的比較:
a = " indented string"
leading_spaces = len(a) - len(a.lstrip())
print(leading_spaces)
然在解釋你:
>>> a = " indented string"
>>> leading_spaces = len(a) - len(a.lstrip())
>>> print(leading_spaces)
4
標籤縮進是上下文特定的...它的變化,不管以何種程序是顯示製表符的設置。這種方法只會告訴您空白字符的總數(每個標籤將被視爲一個字符)。
或者證明:
>>> a = "\t\tindented string"
>>> leading_spaces = len(a) - len(a.lstrip())
>>> print(leading_spaces)
2
編輯:
如果你想這樣做是爲了整個文件,你可能會想嘗試
with open("myfile.txt") as afile:
line_lengths = [len(line) - len(line.lstrip()) for line in afile]
這是我得到的解決方案,但後來我並不困惑如何告訴什麼是標籤,什麼是空間? –
@DhruvGovil你是對的......這不會告訴你,如果它是一個選項卡或空間。如果你想知道有多少空間,我會用martineau提到的'line.expandtab(4)'將選項卡擴展到空格。這會告訴你絕對的空間數量。爲沒有文字的線條設置線條長度也是一個好主意。 – Gizmo
太棒了。這真的很好。謝謝! –
我覺得小發明的基本想法是好的,並且通過使用字符串對象的expandtabs()
方法來擴展它以處理前導製表符和空格的任何混合是相對容易的:
def indentation(s, tabsize=4):
sx = s.expandtabs(tabsize)
return 0 if sx.isspace() else len(sx) - len(sx.lstrip())
print indentation(" tindented string")
print indentation("\t\tindented string")
print indentation(" \t \tindented string")
最後兩個print語句將輸出相同的值。
編輯:我修改它來檢查,如果遇到所有的標籤和空間的線返回0。
謝謝,早先錯過了這個,但那個expandtabs肯定是方便的。 –
看看http://stackoverflow.com/questions/2378962/returning-the-lowest-index-for-the-first-non-whitespace-character-in-a-string-in –
[什麼有你試過了嗎?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – jbowes
你知道空間是如何表現的嗎?一個標籤?計算出現次數,你很好走,不是嗎? – XORcist