我是一个正则表达式的菜鸟,我们说我有一个字符串:
String = 'ABBBABBAAAAAABAAABAAAAAABAAABAABAAAAABAAAAABAABBBBBBBAAAAAAABABABAAA'
我想找到连续A或B链的长度,仅从给定的索引作为链的起点。
我使用re.findall('A+',String)
但它不接受起始索引作为参数。
有没有一种方法可以直接做到这一点?
答案 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