如何在字符串中获取重复出现的字符的位置?

时间:2015-07-16 15:07:29

标签: python python-2.7 position

我有这个字符串:

  

| C100 | 0 | 1 | F120570 | 55 | 00 | 32 | 754929 | 35150456228356008116550320007549291371271334 | 17042015 | 20042015 | 2077,14 | 1 | 2062,48 | 0,00 | 3729,51 | 9 | 0,00 | 0,00 | 3,51 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 | 0,00 |

我需要找到第23个index / position“|”使用Python。

由于我有多个“|”,我不知道该怎么做..

我发现此代码可以找到第二次出现

def get_second_index(input_string, sub_string):
    return input_string.index(sub_string, input_string.index(sub_string) + 1)

但是这个问题对我没有帮助。

我想也许我可以用while x < 23:这样的循环来解决这个问题,但我无法弄清楚究竟是怎么回事......

7 个答案:

答案 0 :(得分:3)

我能想到的最简单的方法是遍历每个角色,并记住你找到的'|'个数量。

count = 0
for index, c in enumerate(string):
   if c == '|':
      count = count + 1
   if count == 23:
      print index
      break

答案 1 :(得分:2)

您可以使用以下正则表达式来精确匹配23'|'字符:

text = "|C100|0|1|F120570|55|00|32|754929|35150456228356008116550320007549291371271334|17042015|20042015|2077,14|1|2062,48|0,00|3729,51|9|0,00|0,00|3,51|0,00|0,00|0,00|0,00|0,00|0,00|0,00|0,00|0,00|"

print re.match("(\|.*?){23}", text).end() - 1

这为您的示例文本提供了154。

答案 2 :(得分:1)

x = 0
for index, char in enumerate(string):
    if char == "|" and x == 23:
        output_index = index
    elif char == "|":
        x += 1
print output_index

enumerate()返回字符串,列表,字典等中每个元素的索引和值。

答案 3 :(得分:1)

您可以使用re.finditer获取包含|使用re.matchObject.start()方法的所有群组的生成器,该方法返回匹配的起始位置,并使用{{1}获取第23个元素}和enumerate函数中的生成器表达式:

next

答案 4 :(得分:1)

您可以在循环中使用string.find()并随时调整起始索引。如下所示:

start = -1
end = len(yourstring)
x = 0
while x < 23:
  start = string.find(yourstring, "|", start + 1, end)\
  x +=1

答案 5 :(得分:1)

import win32com.client as win32

excel = win32.gencache.EnsureDispatch('Excel.Application')
print("Active WB:", excel.ActiveWorkbook.Name)
for wb in excel.Workbooks:
    print("WB:",wb.Name)
    wb.Save()

生成一个列表,其中包含每次出现>>> [i for i, j in enumerate(input_string) if j == '|'][22] >>> 154 的索引,然后返回第23个元素(= 22因为列表为零索引)

答案 6 :(得分:1)

假设s是输入字符串,你需要找到第n个位置:

def find_position(s, n, c):
  return len("".join(s.split(c, maxsplit = n)[:n])) + n - 1