Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何仅捕获正则表达式中的第一个组?_Python_Regex - Fatal编程技术网

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个字符,只需使用索引:不需要正则表达式即可。请编写用于此操作的代码。