Python 如何仅捕获正则表达式中的第一个组?
这是我指的文本:Python 如何仅捕获正则表达式中的第一个组?,python,regex,Python,Regex,这是我指的文本: ' High 4:55AM 1.3m Low 11:35AM 0.34m High 5:47PM 1.12m Low 11:40PM 0.47m First Light 5:59AM Sunrise 6:24AM Sunset 5:01PM Last Light 5:27PM ' 使用Python和regex,我只想捕获:“High 4:55AM 1.3m Low 11:35AM 0.34”(这是文本的第一部分,理想
' High 4:55AM 1.3m Low 11:35AM 0.34m High 5:47PM 1.12m Low 11:40PM 0.47m First Light 5:59AM Sunrise 6:24AM Sunset 5:01PM Last Light 5:27PM '
使用Python和regex,我只想捕获:“High 4:55AM 1.3m Low 11:35AM 0.34”(这是文本的第一部分,理想情况下我希望捕获它而不需要额外的空格)
到目前为止,我已经尝试过这个正则表达式:.{44}
它设法捕获我想要的文本组,即前44个字符,但它也捕获我不想要的后续44个字符组 如果您真的只需要前44个字符,则不需要正则表达式:只需使用Python字符串切片运算符:
first\u 44\u characters=s[:44]
然而,正则表达式的功能要强大得多,它可以解释您感兴趣的部分的长度可能会改变这一事实。例如,如果时间是上午10点而不是凌晨4点,则该部分的长度可能会改变(或者可能不会改变,可能这就是空间填充的目的?)。在这种情况下,您可以使用如下正则表达式捕获它:
>>> re.match(r'\s+(High.*?)m', s).group(1)
'High 4:55AM 1.3'
\s
匹配任何空白字符,+匹配前面的一个或多个元素,括号定义一个以高
开头并包含任何字符的最小长度序列的组,括号后的m
表示该组在小写m
字符之前结束
如果需要,还可以使用正则表达式提取序列的各个部分:
>>> re.match(r'\s+(High)\s+(\d+\:\d+)(AM|PM)\s+(\d+\.\d+)m', s).groups()
('High', '4:55', 'AM', '1.3')
此正则表达式将捕获从第一个
“High”
开始到下一个“High”
(不包括在内)的所有内容,如果没有下一个,则捕获字符串的结尾。它消除了catured组开始和结束时的额外空间
^\s*(High.*?)\s*(?=$|High)
如果要将捕获的组中的所有多个空格减少为单个空格,可以使用替换函数,将此正则表达式替换为
“+”
,,之后,您需要去掉g(全局)Flag如果只需要前44个字符,只需使用索引:不需要正则表达式即可。请编写用于此操作的代码。