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(随机字符)]
,我在问题中添加了一个示例。