首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python:删除与regex匹配的最左边的实例

python:删除与regex匹配的最左边的实例
EN

Stack Overflow用户
提问于 2014-08-27 18:17:52
回答 2查看 49关注 0票数 0

我有一个像这样的字符串

代码语言:javascript
复制
xp = /dir/dir/dir[2]/dir/dir[5]/dir

我想要

代码语言:javascript
复制
xp = /dir/dir/dir[2]/dir/dir/dir

xp.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)]

EN

回答 2

Stack Overflow用户

发布于 2014-08-27 18:21:10

这段代码将删除最后一个方括号,

代码语言:javascript
复制
>>> 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'

先行检查用于检查方括号后面是否有任何非[]符号的字符零次或多次到达行尾。因此,它有助于匹配最后一个[]括号。然后,用空字符串替换匹配的括号将完全删除最后一个括号。

更新:

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

代码语言:javascript
复制
\[[^\]]*\](?=(?:[^\[\]]*\[not\(.*?\)\]$))

DEMO

票数 2
EN

Stack Overflow用户

发布于 2014-08-27 18:29:05

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

代码语言:javascript
复制
                   (.*)\[[^]]*\](.*)
 Greedy Group ------^^  ^^^^^^^^-------- Last bracket [ till ] 

替换:$1$2\1\2

Online demo

示例代码:

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25524528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档