这是我所指的文字:
' 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和正则表达式,我只想捕获:“高4:55 AM 1.3m低11:35 AM 0.34”(这是文本的第一部分,理想情况下我想在没有多余空格的情况下捕获它)。
到目前为止,我尝试过这个正则表达式:。{44}
它设法捕获我想要的文本组,这是前44个字符,但它也捕获了我不想要的44个字符的后续组。
答案 0 :(得分:0)
如果你真的只想要前44个字符,那么你不需要正则表达式:你可以简单地使用Python字符串切片运算符:
first_44_characters = s[:44]
然而,正则表达式更强大,并且可以解释您感兴趣的部分的长度可能会发生变化的事实。例如,如果时间是10AM而不是4AM,那么该部分的长度可能会改变(或者可能不会,也许这就是空间填充的用途?)。在这种情况下,您可以使用这样的正则表达式捕获它:
>>> re.match(r'\s+(High.*?)m', s).group(1)
'High 4:55AM 1.3'
\s
匹配任何空格字符,+匹配前面一个或多个元素,括号定义一个以High
开头并包含任意字符的最小长度序列的组,以及{{ 1}}在括号后面,该组在小写m
字符之前结束。
如果需要,还可以使用正则表达式提取序列的各个部分:
m
答案 1 :(得分:0)
这个正则表达式将捕获从第一个def postMultipartForm(String uri,
File file,
String filePartName,
Map<String, String> textFields = [:],
Map<String, String> httpHeaders = [:]) {
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create()
.addPart(filePartName, new FileBody(file, ContentType.APPLICATION_XML.withCharset(StandardCharsets.UTF_8)))
textFields.each { n, v -> entityBuilder.addTextBody(n, v) }
final expectedResponseContentType = ContentType.ANY
return new HTTPBuilder().request(uri, Method.POST, expectedResponseContentType) { HttpEntityEnclosingRequest req ->
req.entity = entityBuilder.build()
httpHeaders.each { h, v ->
req.addHeader(h, v)
}
}
}
开始直到下一个"High"
(未包括)的所有内容,或者如果没有下一个,则捕获字符串的结尾。它消除了被攻击组开始和结束时的额外空间。
"High"
如果要将所有多个空格减少到捕获的组内的单个空格,可以使用替换函数,然后将此正则表达式^\s*(High.*?)\s*(?=$|High)
替换为" +"