正規表現を使用する必要はありません。これは、 string.StartsWith、string.Substring、およびPath.GetDirectoryName
を
使用してファイル名を削除することで簡単に実行できます。
string fullPath = @"C:\Windows\System32\WindowsPowerShell\v1.0\Examples\profile.ps1";
string toMatch = @"C:\Windows\System32";
string result = string.Empty;
if(fullPath.StartsWith(toMatch, StringComparison.CurrentCultureIgnoreCase) == true)
{
result = Path.GetDirectoryName(fullPath.Substring(toMatch.Length));
}
Console.WriteLine(result);
編集:この変更はaiodintsovからの観察を処理し、非正規または部分的なパス名に関する@Joeからのアイデアを含みます
string fullPath = @"C:\Windows\System32\WindowsPowerShell\v1.0\Examples\profile.ps1";
string toMatch = @"C:\Win";
string result = string.Empty;
string temp = Path.GetDirectoryName(Path.GetFullPath(fullPath));
string[] p1 = temp.Split('\\');
string[] p2 = Path.GetFullPath(toMatch).Split('\\');
for(int x = 0; x < p1.Length; x++)
{
if(x >= p2.Length || p1[x] != p2[x])
result = string.Concat(result, "\\", p1[x]);
}
この場合、部分一致は一致しないと見なされるべきであると思います。また、部分的または非正規パスの問題については、@Joeからの回答を参照してください。