所以我有“./folder/thisisa.test/file.cxx.h”之类的表达。如何替换/删除所有“。”但最后一点?
答案 0 :(得分:14)
答案 1 :(得分:0)
不使用正则表达式,而使用str.count
和str.replace
:
s = "./folder/thisisa.test/file.cxx.h"
s.replace('.', '', s.count('.')-1)
# '/folder/thisisatest/filecxx.h'
答案 2 :(得分:0)
特定的一字符式解决方案
在当前情况下,您可以使用
text = re.sub(r'\.(?![^.]*$)', '', text)
在这里,\.(?![^.]*$)
与.
匹配的\.
(没有紧随(?!...)
后面)与.
以外的任何0+字符(请参见[^.]*
)直到字符串($
)的末尾。
1个字符以上的通用解决方案
如果您要替换.
和字符,则可以在字符类周围使用一个捕获组,并将其与您需要匹配的字符相匹配,并使用{ {1}}和对捕获值的反向引用。
说,您需要删除最后一次出现的.*
,[
,]
,^
,\
,/
或{ {1}}您可以使用
-
请参见regex demo。
详细信息
.
-与([][^\\./-])(?=.*\1)
,([][^\\./-])
,]
,[
,^
,\
,{ {1}}(请注意,这些字符的顺序很重要:.
必须在结尾,/
必须在开头,-
不应在开头,{{ 1}}必须转义)-
-一个积极的前瞻,需要尽可能多的0+个字符,然后在组1中捕获该值。]
用字符串文字记住^
前缀。请注意,\
将使(?=.*\1)
与任何换行序列匹配。