Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 需要正则表达式去除路径的剩余部分_Regex - Fatal编程技术网

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

Regex 需要正则表达式去除路径的剩余部分,regex,Regex,我正在尝试编写一个正则表达式,它将在一个特定的文件夹名之后去掉路径的其余部分 如果输入为: /Repository/Framework/PITA/branches/ChangePack-6a7B6/core/src/Pita.x86.Interfaces/IDemoReader.cs 输出应为: /Repository/Framework/PITA/branches/ChangePack-6a7B6 一些限制条件: ChangePack-后面是ChangePack id,它是数字或字母a-z

我正在尝试编写一个正则表达式,它将在一个特定的文件夹名之后去掉路径的其余部分

如果输入为:

/Repository/Framework/PITA/branches/ChangePack-6a7B6/core/src/Pita.x86.Interfaces/IDemoReader.cs
输出应为:

/Repository/Framework/PITA/branches/ChangePack-6a7B6
一些限制条件:
ChangePack-
后面是ChangePack id,它是数字或字母a-z或a-z的任意顺序组合。更改包id的长度没有限制。
ChangePack-
是一个常量。它将永远在那里

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

/Repository/Demo1/Demo2/4.3//PITA/branches/ChangePack-6a7B6/core/src/Pita.x86.Interfaces
我的regex-fu不好。到目前为止,我想到的是:

^(.*?)\-6a7B6
我需要让这个通用。
任何帮助都将不胜感激。

在开始时,您会一直使用“/Repository/Framework/PITA/branchs/”吗?如果是这样,这将实现以下目的:

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

您可以使用
split
join
函数代替regex。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
是您要匹配的目录名。

下面的正则表达式可以实现此目的

^(.*?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
看看现场直播

尝试此操作。而不是替换抓取匹配的
$1
\1
。请参阅演示


否。它可以更改。可以从SVN中的任何点签出代码以创建更改包。然后路径将更改。我将在windows批处理文件环境中工作。所以拆分和合并可能有点困难。但更大的问题是,它不会永远是第三个文件夹。它的位置会发生变化。如果您确实想要正则表达式,请尝试类似于
^.*\/folder\/
的方法。它将从一开始就匹配到
文件夹的第一个实例
如果您的输入是
/Repository/Framework/ChangePack-7/branchs/ChangePack-6a7B6/hh1
?@NotAgain这也将接受
/Repository/Framework/ChangePack-7/branchs/ChangePack-6a_7B6
^(.*?ChangePack-[a-zA-Z0-9]+)