Python 以开头但不以结尾的正则表达式命名组
我有两个正则表达式(简化为相等) 但它不起作用,我总是用字符串进入后者,这些字符串以“我的字符串”结尾或不以“我的字符串”结尾 我也尝试了另一种方法,因为我的正则表达式是自上而下计算的,但它也不起作用:Python 以开头但不以结尾的正则表达式命名组,python,c,regex,Python,C,Regex,我有两个正则表达式(简化为相等) 但它不起作用,我总是用字符串进入后者,这些字符串以“我的字符串”结尾或不以“我的字符串”结尾 我也尝试了另一种方法,因为我的正则表达式是自上而下计算的,但它也不起作用: r'^(?P<slug>(^foo)[-\w]+(my-string$))/$' r'^(?P<slug>(^foo)[-\w]+(?!my-string$))/$' r'^(?P(^foo)[-\w]+(我的字符串$)/$' r'^(?P(^foo)[-\w]+(?
r'^(?P<slug>(^foo)[-\w]+(my-string$))/$'
r'^(?P<slug>(^foo)[-\w]+(?!my-string$))/$'
r'^(?P(^foo)[-\w]+(我的字符串$)/$'
r'^(?P(^foo)[-\w]+(?!我的字符串$)/$)
更正。。。对于这个特定的需求,您需要在$之前查看后面的断言,以确保字符串不会以my string/结尾:
(foo[-\w\/]+)(?<!my-string\/)$
(foo[-\w\/]+)(?
我不确定你想用p做什么…看起来你想捕获它,可选?你可以把(?:p)?放在foo之前:
((?:P<slug>)?foo[-\w\/]+)(?<!my-string\/)$
((?:P)?foo[-\w\/]+)(?更正…对于此特定要求,您需要在$之前查看后面的断言,以确保字符串不以my string/结尾:
(foo[-\w\/]+)(?<!my-string\/)$
(foo[-\w\/]+)(?
我不确定你想用p做什么…看起来你想捕获它,可选?你可以把(?:p)?放在foo之前:
((?:P<slug>)?foo[-\w\/]+)(?<!my-string\/)$
((?:P)?foo[-\w\/]+)(?您应该对第二个正则表达式使用此负前瞻,因为
[-\w]+
是贪婪的,所以您甚至在触发负前瞻检查之前就消耗了整个字符串
p = r'(?P<slug>(?!.*my-string/$)(^foo)[-\w]+)'
p=r'(?p(?。*mystring/$)(^foo)[-\w]+)'
您应该对第二个正则表达式使用此负前瞻,因为[-\w]+
是贪婪的,所以您甚至在触发负前瞻检查之前就消耗了整个字符串
p = r'(?P<slug>(?!.*my-string/$)(^foo)[-\w]+)'
p=r'(?p(?。*mystring/$)(^foo)[-\w]+)'
我不明白。你说foobar/
应该通过第一个,但是foobar my string/
不应该通过第一个。你能解释清楚确切的要求吗?我不想要以“my string”结尾的字符串为了通过第一个测试,我输入了一个错误,更新了qDo您想要1个正则表达式还是2个正则表达式?您现在已经删除了barfoo/
部分。这不是必需的吗?如果您这样使用它会失败吗:r'^(?P(^foo)[\w]+)/$?不,我有两个相等的正则表达式,但我想添加一个“endswith”子句到第一个,查看更新后的问题我不明白。你说foobar/
应该通过第一个,但是foobar my string/
不应该通过第一个。你能解释清楚确切的要求吗?我不想要以“my string”结尾的字符串为了通过第一个测试,我输入了一个错别字,更新了qDo您想要1个正则表达式还是2个正则表达式?您现在已经删除了barfoo/
部分。这不是必需的吗?如果您这样使用它会失败吗:r'^(?P(^foo)[\w]+)/$?不,我有两个相等的正则表达式,但我想在第一个正则表达式中添加一个“endswith”子句,请参见更新后的问题