需要正则表达式去除路径的剩余部分

时间:2014-12-10 03:41:13

标签: regex

我正在尝试编写一个正则表达式,它将删除特定文件夹名称后的其余路径。

如果输入为:

/Repository/Framework/PITA/branches/ChangePack-6a7B6/core/src/Pita.x86.Interfaces/IDemoReader.cs

输出应为:

/Repository/Framework/PITA/branches/ChangePack-6a7B6

有些限制: ChangePack-将跟随更改包ID,它是任何顺序的数字或字母a-z或A-Z的混合。更改包ID的长度没有限制。 ChangePack-是一个常量。它将永远存在。

ChangePack之前的文本也可以更改。喜欢它也可以是:

/Repository/Demo1/Demo2/4.3//PITA/branches/ChangePack-6a7B6/core/src/Pita.x86.Interfaces

我的正则表达很糟糕。到目前为止我想出的是:

^(.*?)\-6a7B6

我需要使这个通用。 任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

在正则表达式下可以做到这一点。

^(.*?ChangePack-[\w]+)

输入:

/Repository/Framework/PITA/branches/ChangePack-6a7B6/core/src/Pita.x86.Interfaces/IDemoReader.cs
/Repository/Demo1/Demo2/4.3//PITA/branches/ChangePack-6a7B6/core/src/Pita.x86.Interfaces

输出:

/Repository/Framework/PITA/branches/ChangePack-6a7B6
/Repository/Demo1/Demo2/4.3//PITA/branches/ChangePack-6a7B6

查看实时regex demo here

答案 1 :(得分:1)

^(.*?ChangePack-[a-zA-Z0-9]+)

试试这个。取而代之的是取代匹配$1\1。请参阅演示。

https://regex101.com/r/iY3eK8/17

答案 2 :(得分:0)

您是否总是拥有' / Repository / Framework / PITA / branches /'一开始?如果是这样,这将解决问题:

/Repository/Framework/PITA/branches/\w+-\w*

答案 3 :(得分:0)

您可以使用splitjoin函数代替正则表达式。示例python:

path = "/a/b/c/d/e"
folders = path.split("/")
newpath = "/".join(folders[:3]) #trims off everything from the third folder over
print(newpath) #prints "/a/b"

如果您真的想要正则表达式,请尝试^.*\/folder\/之类的内容,其中folder是您要匹配的目录的名称。