Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_Regex - Fatal编程技术网

python:删除最左边匹配正则表达式的实例

python:删除最左边匹配正则表达式的实例,python,regex,Python,Regex,我有一根像 xp = /dir/dir/dir[2]/dir/dir[5]/dir 我想要 xp = /dir/dir/dir[2]/dir/dir/dir xp.replace(r'\[([^]]*)\]','')删除所有方括号,我只想删除最左边的一个 它还应该完全忽略带有not(随机字符数) ex/dir/dir/dir[2]/dir/dir[5]/dir[1][not(随机字符数)] 应产生/dir/dir/dir[2]/dir/dir[5]/dir[not(随机字符数)] 例如,/d

我有一根像

xp = /dir/dir/dir[2]/dir/dir[5]/dir
我想要

xp = /dir/dir/dir[2]/dir/dir/dir
xp.replace(r'\[([^]]*)\]','')
删除所有方括号,我只想删除最左边的一个

它还应该完全忽略带有
not(随机字符数)

ex
/dir/dir/dir[2]/dir/dir[5]/dir[1][not(随机字符数)]

应产生
/dir/dir/dir[2]/dir/dir[5]/dir[not(随机字符数)]

例如,
/dir/dir/dir[2]/dir/dir[5]/dir[not(随机字符数)]


应产生
/dir/dir/dir[2]/dir/dir/dir[not(随机字符数)]
此代码将删除最后的方括号

>>> import re
>>> xp = "/dir/dir/dir[2]/dir/dir[5]/dir"
>>> m = re.sub(r'\[[^\]]*\](?=[^\[\]]*$)', r'', xp)
>>> m
'/dir/dir/dir[2]/dir/dir/dir'
先行检查用于检查方括号后面是否有任何非
[
]
符号的字符在行尾出现零次或多次。因此,它有助于匹配最后的
[]
括号。然后用空字符串替换匹配的括号将完全删除最后的括号

更新:

你也可以试试下面的正则表达式

\[[^\]]*\](?=(?:[^\[\]]*\[not\(.*?\)\]$))

此代码将删除最后一个方括号

>>> import re
>>> xp = "/dir/dir/dir[2]/dir/dir[5]/dir"
>>> m = re.sub(r'\[[^\]]*\](?=[^\[\]]*$)', r'', xp)
>>> m
'/dir/dir/dir[2]/dir/dir/dir'
先行检查用于检查方括号后面是否有任何非
[
]
符号的字符在行尾出现零次或多次。因此,它有助于匹配最后的
[]
括号。然后用空字符串替换匹配的括号将完全删除最后的括号

更新:

你也可以试试下面的正则表达式

\[[^\]]*\](?=(?:[^\[\]]*\[not\(.*?\)\]$))

让它变得贪婪,并用捕获的组替换

                   (.*)\[[^]]*\](.*)
 Greedy Group ------^^  ^^^^^^^^-------- Last bracket [ till ] 
替换:
$1$2
\1\2

示例代码:

import re
p = re.compile(ur'(.*)\[[^]]*\](.*)')
test_str = u"xp = /dir/dir/dir[2]/dir/dir[5]/dir"
subst = u"$1$2"

result = re.sub(p, subst, test_str)

让它变得贪婪,并替换为捕获的组

                   (.*)\[[^]]*\](.*)
 Greedy Group ------^^  ^^^^^^^^-------- Last bracket [ till ] 
替换:
$1$2
\1\2

示例代码:

import re
p = re.compile(ur'(.*)\[[^]]*\](.*)')
test_str = u"xp = /dir/dir/dir[2]/dir/dir[5]/dir"
subst = u"$1$2"

result = re.sub(p, subst, test_str)


是否要删除最后一个
[]
括号?括号之间是否始终有一个或多个数字需要删除,即
'/dir/dir/dir[2]/dir/dir[5]/dir'
变为
'/dir/dir/dir/dir[2]/dir/dir[A]/dir'
不变?是否要删除最后一个
[]
方括号?方括号之间是否总是有一个或多个数字需要删除,即,
'/dir/dir/dir[2]/dir/dir/dir[5]/dir'
变为
'/dir/dir/dir/dir[2]/dir/dir/A]/dir'
,但
'/dir/dir/A]/dir'
不变?贪婪的巧妙使用!如果一个方括号中有[not(randomcharacters)]这样的值,您能让它跳过整个方括号吗?我想忽略带有
[非(随机字符)]
的方括号,替换字符串不应该是
ur'\1\2'
?i、 e.backreferences?@user299709表示如果
[]
包含
()
,则不要删除它。对吗?@mhawke代码是从演示站点复制的。对Python一无所知。让我在帖子里也提一下。谢谢。贪婪的巧妙运用!如果一个方括号中有[not(randomcharacters)]这样的值,您能让它跳过整个方括号吗?我想忽略带有
[非(随机字符)]
的方括号,替换字符串不应该是
ur'\1\2'
?i、 e.backreferences?@user299709表示如果
[]
包含
()
,则不要删除它。对吗?@mhawke代码是从演示站点复制的。对Python一无所知。让我在帖子里也提一下。谢谢。你会如何破例,使它不会删除包含
not(随机字符)
ex./dir/dir/dir[2]/dir/dir[5]/dir[not(随机)]`should'/dir/dir/dir[2]/dir/dir/dir[not(随机)]的方括号?你是指not所引用的not
[
,还是想跳过包含
()
?我想跳过整个
[非(随机字符)]
,我在问题中添加了一个示例。您如何破例,使其不删除包含
非(随机字符)
ex./dir/dir/dir[2]/dir/dir[5]/dir[not(随机)]的方括号?`应产生'/dir/dir/dir/dir[2]/dir/dir/dir/dir/dir[not(随机)]`你是指not后面的not
[
,还是想跳过包含
()
[
?我想跳过整个
[not(随机字符)]
,我在问题中添加了一个示例。