获取python字符串中相同字符的第一个连续序列的开始和结束索引

时间:2020-09-16 05:48:31

标签: python string

我想获取相同字符的第一个连续序列的开始和结束索引 python中的字符串

'aaabca' -> (0, 2)

'helllooo' ->  (2, 4)

'hellooo' -> (2,3)

'abcd' -> (-1, -1)

有没有一种超级干净的方式来实现这一目标?

3 个答案:

答案 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)