使用regex提取没有文件名的路径
本文关键字:文件名 路径 regex 提取 使用 | 更新日期: 2023-09-27 17:53:55
我正好有下面的字符串。使用正则表达式我如何提取只有路径?
"C:'Python34'py.exe" "%1" %*
我已经尝试了这些模式,但没有成功:
([a-zA-Z]:['[a-zA-Z0-9 .]]*)
它给出了整个路径C:'Python34'py.exe
它给出了整个字符串^[^ 't]+['t]+(.*)$
"C:'Python34'py.exe" "%1" %*
编辑
我知道系统的选项。IO命名空间。但是有一个字符串来了,我需要从中提取路径-> "C:'Python34'py.exe" "%1" %*
如我所示,包含路径的字符串可能不是规则的。
您应该使用System.IO.Path
类中可用的静态方法而不是使用Regex。
如果你想要不带文件名的路径,你可以这样做:
string myFullPath = @"C:'Python34'py.exe";
string pathOnly = Path.GetDirectoryName(myFullPath);
//pathOnly will be "C:'Python34"
EDIT:因为你要在路径后面有参数,我们可以先得到第一个引号括起来的子字符串:
Regex quotedPattern = new Regex("(['"'])(?:(?=(''?))'2.)*?'1");
Match matches = quotedPattern.Match(myFullPath);
if(matches.Groups.Count > 0)
{
pathOnly = matches.Captures[0].Value;
pathOnly = Path.GetDirectoryName(pathOnly);
}
RegexStorm
在直接对输入使用Path.GetDirectoryName
的情况下,抛出异常。您可以使用Split
, Trim
和GetDirectoryName
的组合来尝试这种非正则表达式方法:
string value = "'"C:''Python34''py.exe'" '"%1'" %*";
var result = System.IO.Path.GetDirectoryName(value.Split(' ').First().Trim(''"'));
//result: C:'Python34
我猜你可以把它概括一下,找到足够的东西来区分它
从其他引用值。
这要求在引号中至少有一个'
和file.ext
。
"
# @"""([^""]*)''([^""'']+(?:'.[^"".'']+))"""
( # (1 start), Path
[^"]*
) # (1 end)
''
( # (2 start), File name
[^"'']+
(?:
'.
[^".'']+
)
) # (2 end)
"
输出: ** Grp 0 - ( pos 0 , len 22 )
"C:'Python34'py.exe.d"
** Grp 1 - ( pos 1 , len 11 )
C:'Python34
** Grp 2 - ( pos 13 , len 8 )
py.exe.d
另一个选择是使用Path.GetDirectoryName
和一个简单的Substring
:
string value = "'"C:''Python34''py.exe'" '"%1'" %*";
string path = Path.GetDirectoryName(value.Substring(1, value.IndexOf("'"", 2)-1));