0

私はこのような文字列を持っています、それは「READY」の前と「READY」の後に複数のスペースを持っています

次の例のすべての空のスペースはスペースです

'1df34343 43434sebb              READY                     '

result.group(1)として「1df3434343434sebb」を取得できる正規表現を作成するにはどうすればよいですか?

4

5 に答える 5

3

複数のスペース+READYが続く場合、これは必要なグループをキャプチャします。ポジティブ先読みを使用します。

(\S+ \S+)(?=\s{2,}READY)
于 2012-11-28T10:52:37.767 に答える
1

正規表現を理解している場合は、次のことを知っておく必要があります。

  • \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'
于 2012-11-28T10:22:36.583 に答える
1

これは非常に単純な正規表現で、2つのスペースが連続して表示されるまですべてをキャプチャします。

In [11]: s = '1df34343 43434sebb              READY                     '

In [12]: re.match(r'(.*?)\s\s', s).groups()
Out[12]: ('1df34343 43434sebb',)

私が理解したように、これはあなたの要件をキャプチャします。何かがおかしい場合は、明確にしてください。

于 2012-11-28T10:27:06.757 に答える
0

マルチスペースグループの前にあるものと一致します。

 re.compile(r'^(.*?)(?:\s{2,})')

出力:

>>> import re
>>> multispace = re.compile(r'^(.*?)(?:\s{2,})')
>>> multispace.match('1df34343 43434sebb              READY                     ').groups()
('1df34343 43434sebb',)
于 2012-11-28T10:25:26.037 に答える
0

文字列を2つ以上のスペースに分割してみませんか。リストが表示され、そこから必要な最初の要素を取得できます。そのために複雑な正規表現は本当に必要ありません:-

>>> s = '1df34343 43434sebb              READY                     '
>>> import re
>>> re.split(r'[ ]{2,}', s)[0]
>>> '1df34343 43434sebb'
于 2012-11-28T10:35:39.150 に答える