我有一个像这样的字符串
xp = /dir/dir/dir[2]/dir/dir[5]/dir我想要
xp = /dir/dir/dir[2]/dir/dir/dirxp.replace(r'\[([^]]*)\]', '')去掉了所有的方括号,我只想去掉最左边的那个。
它还应该完全忽略带有not(random_number_of_characters)的方括号
ex /dir/dir/dir[2]/dir/dir[5]/dir[1][not(random_number_of_characters)]
应该产生/dir/dir/dir[2]/dir/dir[5]/dir[not(random_number_of_characters)]
例如。/dir/dir/dir[2]/dir/dir[5]/dir[not(random_number_of_characters)]
应该产生/dir/dir/dir[2]/dir/dir/dir[not(random_number_of_characters)]
发布于 2014-08-27 18:21:10
这段代码将删除最后一个方括号,
>>> 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\(.*?\)\]$))DEMO
发布于 2014-08-27 18:29:05
让它变得贪婪,并替换为捕获的组。
(.*)\[[^]]*\](.*)
Greedy Group ------^^ ^^^^^^^^-------- Last bracket [ till ] 替换:$1$2或\1\2
Online demo
示例代码:
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)https://stackoverflow.com/questions/25524528
复制相似问题