【发布时间】:2013-11-27 23:11:08
【问题描述】:
假设我有 3 个正则表达式 A、B 和 C。
我需要将 A 和 B 匹配在一起或单独匹配,但始终至少匹配一个。 C 是可选的。
到目前为止,我的组合正则表达式是 A?B?C,但如果 A 和 B 不匹配,它仍然有效。 我试过 A|BC 但是如果 A 匹配,则不会评估 B,我需要评估它。
(?P<param1>\d+)?(?P<param2>+\d+)?(?P<param3>\w+)
有什么想法吗?
【问题讨论】:
-
您希望它如何区分
param1和param2?在字符串12345678912345中,1、2和3应该是什么组?所有字符都匹配所有组,因此它们将被第一个使用。 -
如果
django标记意味着您在 URL 配置文件中执行此操作,一种简化的方法是让两种不同的模式共享相同的视图 - 一种需要 A 和 B,一种需要 A 或 B。我认为还有其他选择,但我必须查看包含 A 和 B 之间分隔符的实际正则表达式。 -
@OGHaza 如果您仔细观察,两者之间有一个“+”号。
-
@PeterDeGlopper 感谢您的解决方案。如果我找不到一体化解决方案,我将使用它。或者如果 param1 和 param2 都为 None,则从视图内部返回 404
-
@andrei,啊,非常狡猾 ;) 你知道
\w+也捕获数字。如果您知道 param3 不会以数字开头,那么这并不重要,但如果它可以以数字开头,您将得到不正确的结果。