Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以开头但不以结尾的正则表达式命名组_Python_C_Regex - Fatal编程技术网

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”子句,请参见更新后的问题