找到给定索引的连续字符的长度

时间:2014-04-12 12:53:00

标签: python regex

我是一个正则表达式的菜鸟,我们说我有一个字符串:

String = 'ABBBABBAAAAAABAAABAAAAAABAAABAABAAAAABAAAAABAABBBBBBBAAAAAAABABABAAA'

我想找到连续A或B链的长度,仅从给定的索引作为链的起点。

我使用re.findall('A+',String)但它不接受起始索引作为参数。 有没有一种方法可以直接做到这一点?

2 个答案:

答案 0 :(得分:1)

假设index包含您想要的起始位置,并且您只需要一次匹配,并且只有当该匹配从该位置开始时,您才能使用

re.match('A+', String[index:])

如果你必须在正则表达式中进行,你可以使用positive lookbehind assertion,但这会慢得多:

re.search('(?s)(?<=^.{{{}}})A+'.format(index), String)

(如果re.search('^(?s)(?<=.{100})A+', String)index),则为100

答案 1 :(得分:1)

我希望我已经设法确定了你想要实现的目标。

以下内容可能会满足您的需求:

s = 'ABBBABBAAAAAABAAABAAAAAABAAABAABAAAAABAAAAABAABBBBBBBAAAAAAABABABAAA'
for i in range(len(s)):
  res = re.match(r'^(.)\1*', s[i:]).group(0)
  print i, res, len(res)

(我已将整个字符串作为示例循环。您可以改为传递特定索引。)

这将产生字符串中不同索引处的连续字符的长度。执行时它会产生:

0 A 1
1 BBB 3
2 BB 2
3 B 1
4 A 1
5 BB 2
6 B 1
7 AAAAAA 6
8 AAAAA 5
9 AAAA 4
10 AAA 3
11 AA 2
12 A 1
13 B 1
14 AAA 3
15 AA 2
16 A 1
17 B 1
18 AAAAAA 6
19 AAAAA 5
20 AAAA 4
21 AAA 3
22 AA 2
23 A 1
24 B 1
25 AAA 3
26 AA 2
27 A 1
28 B 1
29 AA 2
30 A 1
31 B 1
32 AAAAA 5
33 AAAA 4
34 AAA 3
35 AA 2
36 A 1
37 B 1
38 AAAAA 5
39 AAAA 4
40 AAA 3
41 AA 2
42 A 1
43 B 1
44 AA 2
45 A 1
46 BBBBBBB 7
47 BBBBBB 6
48 BBBBB 5
49 BBBB 4
50 BBB 3
51 BB 2
52 B 1
53 AAAAAAA 7
54 AAAAAA 6
55 AAAAA 5
56 AAAA 4
57 AAA 3
58 AA 2
59 A 1
60 B 1
61 A 1
62 B 1
63 A 1
64 B 1
65 AAA 3
66 AA 2
67 A 1