私はこのような文字列を持っています、それは「READY」の前と「READY」の後に複数のスペースを持っています
次の例のすべての空のスペースはスペースです
'1df34343 43434sebb READY '
result.group(1)として「1df3434343434sebb」を取得できる正規表現を作成するにはどうすればよいですか?
複数のスペース+READYが続く場合、これは必要なグループをキャプチャします。ポジティブ先読みを使用します。
(\S+ \S+)(?=\s{2,}READY)
正規表現を理解している場合は、次のことを知っておく必要があります。
\s
:空白文字\S
:空白以外の文字+
:前のキャプチャの少なくとも1つ。脚本:
>>> import re
>>> s = '1df34343 43434sebb READY '
>>> ms = re.match(r"(\S+ \S+)\s+(\S+)\s+", s)
>>> ms.groups()
('1df34343 43434sebb', 'READY')
>>> ms.group(1)
'1df34343 43434sebb'
>>> ms.group(2)
'READY'
持っているもののより詳細な解析が必要な場合に使用できる、より機能的な正規表現を使用することもできます。
>>> ms = re.match(r"((\S+) (\S+))\s+(\S+)\s+", s)
>>> ms.groups()
('1df34343 43434sebb', '1df34343', '43434sebb', 'READY')
>>> ms.group(1)
'1df34343 43434sebb'
>>> ms.group(2)
'1df34343'
>>> ms.group(3)
'43434sebb'
>>> ms.group(4)
'READY'
これは非常に単純な正規表現で、2つのスペースが連続して表示されるまですべてをキャプチャします。
In [11]: s = '1df34343 43434sebb READY '
In [12]: re.match(r'(.*?)\s\s', s).groups()
Out[12]: ('1df34343 43434sebb',)
私が理解したように、これはあなたの要件をキャプチャします。何かがおかしい場合は、明確にしてください。
マルチスペースグループの前にあるものと一致します。
re.compile(r'^(.*?)(?:\s{2,})')
出力:
>>> import re
>>> multispace = re.compile(r'^(.*?)(?:\s{2,})')
>>> multispace.match('1df34343 43434sebb READY ').groups()
('1df34343 43434sebb',)
文字列を2つ以上のスペースに分割してみませんか。リストが表示され、そこから必要な最初の要素を取得できます。そのために複雑な正規表現は本当に必要ありません:-
>>> s = '1df34343 43434sebb READY '
>>> import re
>>> re.split(r'[ ]{2,}', s)[0]
>>> '1df34343 43434sebb'