首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用regex将由单词(不包括)开始的子字符串匹配到字符串的末尾,同时保持不贪婪?

如何使用regex将由单词(不包括)开始的子字符串匹配到字符串的末尾,同时保持不贪婪?
EN

Stack Overflow用户
提问于 2022-06-02 17:23:59
回答 1查看 40关注 0票数 -1

我希望找到一个以单词(\d月|\d日) (不包括在结果中)开头的子字符串,到字符串的末尾,同时保持子字符串最短(非贪婪)。例如,

代码语言:javascript
运行
复制
str1 = "秋天9月9日长江工程完成"
res1 = re.search(r'(\d月|\d日).*', str1).group() #return 9月9日长江工程完成

我想像长江工程完成一样返回结果,例如,

代码语言:javascript
运行
复制
str2 ="秋天9月9日9日长江工程完成"

它应该得到和以前一样的结果

因此我尝试了这几种方法,但都返回了意想不到的结果,请给我一些建议.

代码语言:javascript
运行
复制
res1 = re.search(r'(?:(?!\d月|\d日))(?:\d月|\d日)', str1).group() #return 9月
res1 = re.search(r'(?:\d月|\d日)((?:(?!\d月|\d日).)*?)', content).group()  #return 9月
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-02 17:42:40

如果要捕获字符串的其余部分,请用组包围.*

要捕获同一模式中的一个或多个模式,可以使用+运算符。

代码语言:javascript
运行
复制
import re

content = "9月9日9月长江工程完成"
match = re.match(r'(?:\d月|\d日)+(.*)', content)
print(match[1])

输出:

代码语言:javascript
运行
复制
长江工程完成

(?:(?!\d月|\d日))(?:\d月|\d日)

此模式只捕获初始单词,因为您没有将其余的作为一个组来捕获。(而且,它只允许出现两种情况)。

(?:\d月|\d日)((?:(?!\d月|\d日).)*?)

此模式只需要匹配如下所示的字符串:9月4日a6日b0月x -可能不是您需要的字符串。

确保从re中选择正确的函数:matchsearchfullmatch (参见What is the difference between re.search and re.match?)。您说需要整个字符串以给定的单词开头,所以matchfullmatch

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72480073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档