我希望找到一个以单词(\d月|\d日)
(不包括在结果中)开头的子字符串,到字符串的末尾,同时保持子字符串最短(非贪婪)。例如,
str1 = "秋天9月9日长江工程完成"
res1 = re.search(r'(\d月|\d日).*', str1).group() #return 9月9日长江工程完成
我想像长江工程完成
一样返回结果,例如,
str2 ="秋天9月9日9日长江工程完成"
它应该得到和以前一样的结果
因此我尝试了这几种方法,但都返回了意想不到的结果,请给我一些建议.
res1 = re.search(r'(?:(?!\d月|\d日))(?:\d月|\d日)', str1).group() #return 9月
res1 = re.search(r'(?:\d月|\d日)((?:(?!\d月|\d日).)*?)', content).group() #return 9月
发布于 2022-06-02 17:42:40
如果要捕获字符串的其余部分,请用组包围.*
。
要捕获同一模式中的一个或多个模式,可以使用+
运算符。
import re
content = "9月9日9月长江工程完成"
match = re.match(r'(?:\d月|\d日)+(.*)', content)
print(match[1])
输出:
长江工程完成
(?:(?!\d月|\d日))(?:\d月|\d日)
此模式只捕获初始单词,因为您没有将其余的作为一个组来捕获。(而且,它只允许出现两种情况)。
(?:\d月|\d日)((?:(?!\d月|\d日).)*?)
此模式只需要匹配如下所示的字符串:9月4日a6日b0月x
-可能不是您需要的字符串。
确保从re
中选择正确的函数:match
、search
或fullmatch
(参见What is the difference between re.search and re.match?)。您说需要整个字符串以给定的单词开头,所以match
或fullmatch
。
https://stackoverflow.com/questions/72480073
复制相似问题