次のように、空白で区切られた一連の 2 進数を検索しようとしています。
>>> seq = '0 1 1 1 0 0 1 0'
したがって、正規表現を作成します。
>>> pat = r'(\b[01]\b)+'
ただし、次の検索では 1 桁のみが返されます。
>>> re.search(pat, seq).group(0)
'0'
どうしたの?
次のように、空白で区切られた一連の 2 進数を検索しようとしています。
>>> seq = '0 1 1 1 0 0 1 0'
したがって、正規表現を作成します。
>>> pat = r'(\b[01]\b)+'
ただし、次の検索では 1 桁のみが返されます。
>>> re.search(pat, seq).group(0)
'0'
どうしたの?
あなたは非常に近いです。パターンにスペースがありません。試すpat = r'\b([01] )*[01]\b'
>>> import re
>>> seq = '0 1 1 1 0 0 1 0'
>>> pat = r'\b([01] )*[01]\b'
>>> re.search(pat, seq).group(0)
'0 1 1 1 0 0 1 0'
>>> re.search(pat, 'spam and 0 0 0 1 0eggs').group(0)
'0 0 0 1'
現在の正規表現には空白と一致する方法がないため、1 つの文字にしか一致できません。同じ正規表現を使用re.findall()
して文字列内のすべての一致を取得するか、正規表現を変更して、空白が発生した場合でも一致を継続するようにすることができます。
を使用した例を次に示しre.findall()
ます。
>>> re.findall(r'(\b[01]\b)+', '0 1 1 1 0 0 1 0')
['0', '1', '1', '1', '0', '0', '1', '0']
または、正規表現を次のように変更する(\b[01]\b\s?)+
と、1 回の一致でシーケンス全体を取得できます。
>>> re.search(r'(\b[01]\b\s?)+', '0 1 1 1 0 0 1 0').group(0)
'0 1 1 1 0 0 1 0'