我有这个字符串:
| 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:
这样的循环来解决这个问题,但我无法弄清楚究竟是怎么回事......
答案 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