如何获取字符串中重复出现的字符的位置?
How can I get the position of a recurring character in a string?
我有这个字符串:
|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:
这样的循环来获得它,但我无法弄清楚如何...
我能想到的最简单的方法是遍历每个字符并记录找到的字符数 '|'
。
count = 0
for index, c in enumerate(string):
if c == '|':
count = count + 1
if count == 23:
print index
break
x = 0
for index, char in enumerate(string):
if char == "|" and x == 23:
output_index = index
elif char == "|":
x += 1
print output_index
enumerate() returns 字符串、列表、字典等中每个元素的索引和值
您可以使用 re.finditer
来获得一个包含所有组的生成器 |
使用 re.matchObject.start()
方法 return 您的比赛的开始位置并获得第 23 个具有 enumerate
的元素和 next
函数中的生成器表达式:
>>> all_case=re.finditer(r'\|',s)
>>> next(j.start() for i,j in enumerate(all_case,1) if i==23)
154
您可以在循环中使用 string.find()
并随时调整起始索引。类似于以下内容:
start = -1
end = len(yourstring)
x = 0
while x < 23:
start = string.find(yourstring, "|", start + 1, end)\
x +=1
>>> [i for i, j in enumerate(input_string) if j == '|'][22]
>>> 154
生成一个列表,其中包含每次出现的 |
的索引,然后是 returns 第 23 个元素(=22,因为列表是零索引的)
假设 s 是输入字符串,你需要找到第 n 个位置 |:
def find_position(s, n, c):
return len("".join(s.split(c, maxsplit = n)[:n])) + n - 1
您可以使用以下正则表达式来精确匹配 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。
我有这个字符串:
|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:
这样的循环来获得它,但我无法弄清楚如何...
我能想到的最简单的方法是遍历每个字符并记录找到的字符数 '|'
。
count = 0
for index, c in enumerate(string):
if c == '|':
count = count + 1
if count == 23:
print index
break
x = 0
for index, char in enumerate(string):
if char == "|" and x == 23:
output_index = index
elif char == "|":
x += 1
print output_index
enumerate() returns 字符串、列表、字典等中每个元素的索引和值
您可以使用 re.finditer
来获得一个包含所有组的生成器 |
使用 re.matchObject.start()
方法 return 您的比赛的开始位置并获得第 23 个具有 enumerate
的元素和 next
函数中的生成器表达式:
>>> all_case=re.finditer(r'\|',s)
>>> next(j.start() for i,j in enumerate(all_case,1) if i==23)
154
您可以在循环中使用 string.find()
并随时调整起始索引。类似于以下内容:
start = -1
end = len(yourstring)
x = 0
while x < 23:
start = string.find(yourstring, "|", start + 1, end)\
x +=1
>>> [i for i, j in enumerate(input_string) if j == '|'][22]
>>> 154
生成一个列表,其中包含每次出现的 |
的索引,然后是 returns 第 23 个元素(=22,因为列表是零索引的)
假设 s 是输入字符串,你需要找到第 n 个位置 |:
def find_position(s, n, c):
return len("".join(s.split(c, maxsplit = n)[:n])) + n - 1
您可以使用以下正则表达式来精确匹配 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。