Python正则表达式
有一个问题长期困扰着我 在Python中,正则表达式总是匹配内容中最长的字符串 例如,内容如下:Python正则表达式,python,regex,Python,Regex,有一个问题长期困扰着我 在Python中,正则表达式总是匹配内容中最长的字符串 例如,内容如下: <test> A <br> B <br> AB 如果我使用regexre.compile('/(\w\s)+/'),python将匹配最长的字符串,这意味着AB 如何匹配最短的字符串,即A 感谢您的阅读和回复。re.compile('/(\w\s)+?/) re.compile('/<test/>(\w\s)+?/<br/>') 注
<test> A <br> B <br>
A
B
如果我使用regexre.compile('/(\w\s)+/
')
,python将匹配最长的字符串,这意味着A
B
如何匹配最短的字符串,即A
感谢您的阅读和回复。re.compile('/(\w\s)+?/
)
re.compile('/<test/>(\w\s)+?/<br/>')
注意(\w\s)+
有关详细信息,请参见重新编译('/(\w\s)+?/) 注意
(\w\s)+
有关详细信息,请参见您的正则表达式看起来非常奇怪。我想你的意思是:
re.compile('/<test>[\w\s]+<br>/')
re.compile('/[\w\s]+
/)
在这种情况下,您可以使用问号将其设置为“非贪婪”:
re.compile('/<test>[\w\s]+?<br>/')
重新编译('/[\w\s]+?/'))
您的正则表达式看起来非常奇怪。我想你的意思是:
re.compile('/<test>[\w\s]+<br>/')
re.compile('/[\w\s]+
/)
在这种情况下,您可以使用问号将其设置为“非贪婪”:
re.compile('/<test>[\w\s]+?<br>/')
重新编译('/[\w\s]+?/'))
您需要使用非贪婪匹配,可以在手册中找到(只需搜索非贪婪):
在您的情况下,我相信正确的正则表达式应该是:
re.compile('/(\w\s)+?/
)
您需要使用非贪婪匹配,可以在手册中找到(只需搜索非贪婪):
在您的情况下,我相信正确的正则表达式应该是:re.compile('/(\w\s)+?/
')
来自:
*?
,+?
,?
“*”
、“+”
和“?”
限定符都是贪婪的;它们匹配尽可能多的文本。有时这种行为是不可取的;如果RE
与'title'
匹配,它将匹配整个字符串,而不仅仅是'
。在限定符之后添加“?”
,使其以非贪婪或最小方式执行匹配;将匹配尽可能少的字符。在前面的表达式中使用*?
将只匹配'
但是您不应该对XML使用正则表达式。来自:
*?
,+?
,?
“*”
、“+”
和“?”
限定符都是贪婪的;它们匹配尽可能多的文本。有时这种行为是不可取的;如果RE
与'title'
匹配,它将匹配整个字符串,而不仅仅是'
。在限定符之后添加“?”
,使其以非贪婪或最小方式执行匹配;将匹配尽可能少的字符。在前面的表达式中使用*?
将只匹配'
但是您不应该对XML使用正则表达式。在
+
中添加一个?
,使其不贪婪(它并不总是匹配内容中最长的字符串)嗨,我认为添加?不是解决这个问题的好办法。因为表示0或1次,它将匹配此简单原因和其他更复杂原因中的最长字符串。谢谢你的回复。@Jimmy the?
在正则表达式中有不止一个含义,如果你把它放在一个量词后面,那么它的意思就是“使这个量词不贪婪”。哦,我知道你的意思,我稍后再试。我误解了你的意思。很抱歉。生活中一个普遍有用的原则是,在遇到奇怪的基本问题之前,研究文档是非常有用的。关于SO的第二个有用的原则是,搜索通常非常有用,特别是对于被问了一百万次的问题。将?
添加到+
以使其不贪婪(它并不总是匹配内容中最长的字符串)嗨,我认为添加?不是解决这个问题的好办法。因为表示0或1次,它将匹配此简单原因和其他更复杂原因中的最长字符串。谢谢你的回复。@Jimmy the?
在正则表达式中有不止一个含义,如果你把它放在一个量词后面,那么它的意思就是“使这个量词不贪婪”。哦,我知道你的意思,我稍后再试。我误解了你的意思。很抱歉。生活中一个普遍有用的原则是,在遇到奇怪的基本问题之前,研究文档是非常有用的。关于SO的第二个有用原则是,搜索通常非常有用,特别是对于被问了一百万次的问题。我没有投反对票,但我假设因为您在OP中采用了错误的正则表达式,(\w\s)+?
是错误的,应该是[\w\s]+?
当然不是。详细说明意味着他们的论点可能会被拆散,让他们看起来像个傻瓜。打了就跑更容易。@IgnacioVazquez Abrams,对不起,每个人都可以投他想要的每一票,因为他喜欢的每一个原因,我不能解释每一票,相信我,有很多票我不明白。好吧,让我们停止讨论,我只是好奇原因是什么@也许是这样,我没有把重点放在正则表达式本身,而是放在贪婪/非贪婪部分。当然,你是对的,我没有投反对票,但我认为,因为你在OP中采用了错误的正则表达式,(\w\s)+?
是错误的,应该是[\w\s]+?
当然不是。详细说明意味着他们的论点可能会被拆散,让他们看起来像个傻瓜。打了就跑更容易。@IgnacioVazquez Abrams,对不起,每个人都可以投他想要的每一票,因为他喜欢的每一个原因,我不能解释每一票,相信我,有很多票我不明白。好吧,让我们停止讨论,我只是好奇原因是什么@也许是这样,我没有把重点放在正则表达式本身上,更多的是放在贪婪上