什么';在Python中,查找字符串开头空格数的最快方法是什么?

什么';在Python中,查找字符串开头空格数的最快方法是什么?,python,text-parsing,Python,Text Parsing,找到字符串开头的空格数的最快方法是什么?我想用它来计算我的空格缩进的嵌套程度(文本解析时) 例如 我可能不会问这个问题,但我注意到我在任何地方都找不到它的快速参考(因此,我想我应该做我自己的Q/a;如果你有其他方法,请随意贡献!)。可以使用str.lstrip()方法并计算两个字符串的长度差,这将是字符串开头的空格数 def num_start_spaces(text): return len(text)-len(text.lstrip(" ")) print(num_start_sp

找到字符串开头的空格数的最快方法是什么?我想用它来计算我的空格缩进的嵌套程度(文本解析时)

例如


我可能不会问这个问题,但我注意到我在任何地方都找不到它的快速参考(因此,我想我应该做我自己的Q/a;如果你有其他方法,请随意贡献!)。

可以使用
str.lstrip()
方法并计算两个字符串的长度差,这将是字符串开头的空格数

def num_start_spaces(text):
    return len(text)-len(text.lstrip(" "))

print(num_start_spaces("        spaces"))
上面打印的是“8个空格”

编辑:我使用重复问题中的信息增强了上述答案

然而,对于手头的任务,我认为在所述上下文中单独完成这项任务会有点乏味,并且会有很多开销。在进行任何文本解析之前,您可能希望使用它来列出每行的缩进(然后当您遍历这些行时,您将有一个用于快速参考的缩进):

lines=myString.split(“\n”)#lines是我们正在解析的文本的行
缩进=[]#值是行上的缩进数。
对于行中的行:
空格=数量\开始\空格(行)
如果空间%4=0:
raise VALUERROR(“行“+str(长度(缩进))+”上的空格不是零或四的倍数:”,空格)
缩进。追加(空格/4)
i=0

当i时,可以使用
str.lstrip()
方法并获取两个字符串的长度差,即字符串开头的空格数

def num_start_spaces(text):
    return len(text)-len(text.lstrip(" "))

print(num_start_spaces("        spaces"))
上面打印的是“8个空格”

编辑:我使用重复问题中的信息增强了上述答案

然而,对于手头的任务,我认为在所述上下文中单独完成这项任务会有点乏味,并且会有很多开销。在进行任何文本解析之前,您可能希望使用它来列出每行的缩进(然后当您遍历这些行时,您将有一个用于快速参考的缩进):

lines=myString.split(“\n”)#lines是我们正在解析的文本的行
缩进=[]#值是行上的缩进数。
对于行中的行:
空格=数量\开始\空格(行)
如果空间%4=0:
raise VALUERROR(“行“+str(长度(缩进))+”上的空格不是零或四的倍数:”,空格)
缩进。追加(空格/4)
i=0

而我这里有一个替代答案:

def countspaces(x):
    for i, j in enumerate(x):
        if j != ' ':
            return i

s="     There are five spaces"

countspaces(s)  # 5

下面是另一个答案:

def countspaces(x):
    for i, j in enumerate(x):
        if j != ' ':
            return i

s="     There are five spaces"

countspaces(s)  # 5

这与您未归因于的有什么不同(或增强)吗。我只是在搜索时没有发现(顺便说一句,我是对重复评论投了赞成票的人之一)@Pault我的意思是,在发现复制品后,我用我在那里看到的来增强我的答案(不是为了让它比那个更好)。好吧,这是有道理的。在我看来,你应该删除这个问题。但是如果你想保留它,至少在你的帖子中承认另一个答案。我对另一个答案投了赞成票。我将不删除这个问题,以便更容易找到(因为我在我的答案中针对问题的独特方面添加了一些内容)。这与您没有归因于的问题有什么不同(或增强)吗?没有。我只是在搜索时没有发现(顺便说一句,我是对重复评论投了赞成票的人之一)@Pault我的意思是,在发现复制品后,我用我在那里看到的来增强我的答案(不是为了让它比那个更好)。好吧,这是有道理的。在我看来,你应该删除这个问题。但是如果你想保留它,至少在你的帖子中承认另一个答案。我对另一个答案投了赞成票。我将不删除这个问题,以便更容易找到(因为我在回答中针对问题的独特方面添加了一些内容)。
len(s.split(“”[0])+1
len(s.split(“”[0])+1