Python 正则表达式匹配下一个
我在编写正则表达式以匹配名称时遇到了问题,如果名称后面有一个包含数字的页面,那么它应该同时匹配这两个名称 第一个示例与页面不匹配,因为正则表达式发现|是惰性的Python 正则表达式匹配下一个,python,regex,Python,Regex,我在编写正则表达式以匹配名称时遇到了问题,如果名称后面有一个包含数字的页面,那么它应该同时匹配这两个名称 第一个示例与页面不匹配,因为正则表达式发现|是惰性的 name|(?:,page(\d+))/ name/ name,page1/ 第二个示例将匹配名称和页码,但不会仅匹配名称: (?:name)(?:,page(\d+))/ 到目前为止,我没有任何更多的想法,或者我没有注意到特殊角色的正确表达 有人能给我一些提示来解决这个问题吗:) 编辑: 我确实想出了这个解决方案: name(,p
name|(?:,page(\d+))/
name/
name,page1/
第二个示例将匹配名称和页码,但不会仅匹配名称:
(?:name)(?:,page(\d+))/
到目前为止,我没有任何更多的想法,或者我没有注意到特殊角色的正确表达
有人能给我一些提示来解决这个问题吗:)
编辑:
我确实想出了这个解决方案:
name(,page(\d+))|name/
使用可选运算符
name(?:,page\d+)?\/
(?:,page\d+)
是非捕获组,?
表示它可以出现1次或0次
请参阅。简单的
名称(,第(\d+)页)不应该按预期工作吗?@Efrin:?:
用于不捕获组,选择器后的?
用于将其设置为“可选”。看起来你把两者混淆了。注意,
是OR运算符,所以在你的第一个正则表达式中,它将匹配名称
或(?:,page(\d+)/
@rednaw我注意到,|不会像我所希望的那样工作,因为我提到过“|不会匹配页面,因为正则表达式发现|这是懒惰的”,“懒惰”一词的主要意思是当一个*
或+
附加了一个?
,(如*?
和+?
使*
或+
尽快停止,这被称为“懒惰”.The|
操作员与懒惰没有任何关系。这是有效的。我不知道你是否对django有任何经验,但是否可以将“name”视为*arg或**kwarg?@Efrin抱歉,我不知道你的意思,我对django没有经验。