比方说,如果它包含一定数量的某个字符,我想匹配一个子字符串.但是,我不知道这个角色的确切数量,但我知道这不是负面的.我怎么写这个正则表达式?
from sys import stdin
import re
k = int(raw_input())
combo = re.compile(r'(?=(.*1.*){k})')
print [ s for s in combo.findall(stdin.readline().strip()) ]
Run Code Online (Sandbox Code Playgroud)
这可能吗?如果是这样,我该怎么办?
编辑:示例输入:k = 2 string = 01010
预期输出:"101","0101","1010","01010"
所以在每个子字符串中,它包含2个字符'1'
正则表达式是字符串,所以随意使用您喜欢的字符串格式构造:
combo = re.compile(r'(?=(.*1.*){%d})' % k)
Run Code Online (Sandbox Code Playgroud)
至于你编辑过的问题,我找不到用regexp做到这一点的简单方法,下面怎么做?
def all_substrings(s):
m = len(s)
for i in range(m):
for j in range(i, m):
yield s[i:j+1]
s = '01010'
print [x for x in all_substrings(s) if x.count('1') == 2]
Run Code Online (Sandbox Code Playgroud)