0

I have a string like this, it has multiple spaces before 'READY' and after 'READY'

All empty space in the following examples are Space

'1df34343 43434sebb              READY                     '

How can I write a regular expression which can get '1df34343 43434sebb' as result.group(1)?

4

5 回答 5

3

如果后面有多个空格 + READY,这将捕获所需的组。使用积极的前瞻性。

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

这是一个非常简单的正则表达式,它捕获所有内容,直到它连续看到两个空格:

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 回答
1

如果您了解正则表达式,您应该知道以下内容:

  • \s: 空白字符
  • \S: 非空白字符
  • + : 至少一个之前的捕获。

脚本:

>>> 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 回答
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 回答