1

たとえば、特定の数の文字が含まれている場合、部分文字列と一致させたいとします。ただし、そのキャラクターが正確な量はわかりませんが、マイナスではないことはわかっています。この正規表現をどのように記述しますか?

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()) ]

これは可能ですか?もしそうなら、どうすればいいですか?

編集: 入力例: k = 2 文字列 = 01010

期待される出力: "101"、"0101"、"1010"、"01010"

したがって、各部分文字列には、正確に 2 文字 '1' が含まれます。

4

2 に答える 2

6

正規表現は文字列なので、お好みの文字列フォーマット構造を自由に使用してください:

combo = re.compile(r'(?=(.*1.*){%d})' % k)

あなたの編集された質問に関して、私は正規表現でそれを行う簡単な方法を見つけることができません.次はどうですか?

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]
于 2013-06-10T07:57:23.690 に答える