我想获取相同字符的第一个连续序列的开始和结束索引 python中的字符串
'aaabca' -> (0, 2)
'helllooo' -> (2, 4)
'hellooo' -> (2,3)
'abcd' -> (-1, -1)
有没有一种超级干净的方式来实现这一目标?
答案 0 :(得分:2)
您可以使用regex
查找重复的字符((\w)\1+
),然后获取匹配项的位置(使用m.start()
和m.end()
)>
values = ['aaabca', 'helllooo', 'hellooo', 'abcd']
for value in values:
m = re.search(r'(\w)\1+', value)
if m:
print(f'{value:10s}{str((m.start(), m.end() - 1)):10s}{m.group(0)}')
else:
print(f'{value:10s}{str((-1, -1)):10s}')
给予
aaabca (0, 2) aaa
helllooo (2, 4) lll
hellooo (2, 3) ll
abcd (-1, -1)
要更改搜索重复字符的字符类型,请替换\w
(\d)\1+
重复数字(.)\1+
重复任何字符([a-z])\1+
重复小写字母答案 1 :(得分:0)
这是一种方法
x = "helllooo"
count = 0
start = -1
end = -1
for i in range(len(x)-1):
if x[i] == x[i+1]:
if count == 0:
start = i
count += 1
end = start + count
else:
if count > 0:
break
count = 0
print(start, end)
答案 2 :(得分:0)
我对stackoverflow的第一个答案。我希望你能给我代表:) 总的来说,今天过得愉快
word_list=['aaabca','helllooo','hellooo','abcd']
def find(word):
first_char=[]
index_list=[]
for n,i in enumerate(word):
if n+1<len(word):
if i==word[n+1]:
first_char.append(i)
while first_char[0]==i:
index_list.append(n)
index_list.append(n+1)
break
try:
print(index_list[0],index_list[-1])
except:
print(-1,-1)
for word in word_list:
find(word)