【问题标题】:Python String: How to parse string and find specific String index?Python String:如何解析字符串并找到特定的字符串索引?
【发布时间】:2020-01-15 19:55:59
【问题描述】:

我想在我想要的地方创建一个元组列表:

  • 元组的第一个元素 = 字母索引
  • 元组的第二个元素 = 下一个字母之前的空白索引
# String
input= "M   i     n        d"

# List of tuple
output = [(0, 3), (4, 9), (10, 18), (19, 19)]

我能写出这个逻辑(最后一个元组有错误),但觉得必须有更聪明的写法。有什么想法吗?

string = "M   i     n        d"
coltuple = []

for a in string:

    if a.isalpha() == True:
        start = string.index(a)
        next_string = string[(start + 1) :]

        if next_string:

            for b in next_string:

                if b.isalpha() == True:
                    end = string.index(b) - 1
                    print("End:", end)
                    break
        else:
            end = len(string) - 1

        coltuple += [(start, end)]

print(coltuple)

【问题讨论】:

    标签: python string parsing


    【解决方案1】:

    这可以使用re 模块解决。

    import re
    
    L = []
    string = "M   i     n        d"
    
    pat = re.compile(r'\S+\s*')
    
    for token in pat.finditer(string):
        L.append((token.start(), token.end()-1))
    
    print(L)
    

    打印:

    [(0, 3), (4, 9), (10, 18), (19, 19)]

    如果您打算使用这些值来索引字符串,最好使用token.end() 而不是token.end()-1

    注意:从常规 exp 中删除了捕获括号。是r'(\S+\s*)

    【讨论】:

      【解决方案2】:

      这是我想出的:

      inputString= "M   i     n        d"
      
      alphaIndexes = []
      alphaTuples = []
      
      # Loop over range based on length of input
      for i in range(0, len(inputString)):
          # if its alpha
          if inputString[i].isalpha() == True:
              print("Alpha at {}".format(i))
              # append it to list of indexes
              alphaIndexes.append(i)
      
      # Loop over range based on length of all found alphas
      # minus one since we will create pairs
      for i in range(0, len(alphaIndexes)-1):
          # Append to list o alpha tuples tuple of
          # current index and next index but substract that next one by one
          alphaTuples.append((alphaIndexes[i], alphaIndexes[i+1]-1))
      
      print(alphaTuples)
      

      【讨论】:

      • 我也喜欢你的解决方案,因为它是可读的。虽然,输出中缺少最后一个元组 (19, 19)
      • 我的错,我相信你正在搜索其他逻辑,因为错误。
      • 是的,更多改进的逻辑也添加了最后一个。
      猜你喜欢
      • 1970-01-01
      • 2015-02-22
      • 2012-07-03
      • 2021-01-13
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多