Понимание этого является плохой идеей, я записал, что этот regex в жемчуге - вот что работавший лучшее для меня. Я уже отфильтровал названия компаний.
Вывод в формате vcard: (hon_prefix, given_name, additional_name, family_name, почтенный суффикс)
/^ \s*
(?:((?:Dr.)|(?:Mr.)|(?:Mr?s.)|(?:Miss)|(?:2nd\sLt.)|(?:Sen\.?))\s+)? # prefix
((?:\w+)|(?:\w\.)) # first name
(?: \s+ ((?:\w\.?)|(?:\w\w+)) )? # middle initial
(?: \s+ ((?:[OD]['’]\s?)?[-\w]+)) # last name
(?: ,? \s+ ( (?:[JS]r\.?) | (?:Esq\.?) | (?: (?:M)|(?:Ph)|(?:Ed) \.?\s*D\.?) |
(?: R\.?N\.?) | (?: I+) ) )? # suffix
\s* $/x
примечания:
Short answer: not really.
There is no simple way to get the canonical name of a file on Windows. Local files can be available via reparse points, via SUBST. Do you want to deal with NTFS junctions? Windows shortcuts? What about \\?\
-escaped filenames
Remote files can be available via mapped drive letter or via UNC. Is that the UNC to the origin server? Are you using DFS? Is the server using reparse points, etc.? Is the server available by more than one name? What about the IP address? Does it have more than one IP address?
So, if you're looking for something like the inode number on Windows, it ain't there. See, for example, this page.
Роджер прав, простого пути нет. Если том поддерживает файл с уникальным индексом файла, вы можете открыть файл и вызвать GetFileInformationByHandle , но это не будет работать на всех томах.
Вызов Windows API GetFullPathName может быть лучший простой подход.
jheddings дает хороший ответ, но поскольку вы не указали, какой язык вы используете, я подумал, что дам способ Python, который также работает из командной строки, используя os.path.abspath :
> python -c "import os.path; print os.path.abspath('C:\stuff\things\etc\misc\other\..\whatever.txt')"
C:\stuff\things\etc\misc\whatever.txt
Using FileInfo
(example in C#):
FileInfo info1 = new FileInfo(@"C:\stuff\things\etc\misc\whatever.txt");
FileInfo info2 = new FileInfo(@"C:\stuff\things\etc\misc\other\..\whatever.txt");
if (info1.FullName.Equals(info2.FullName)) {
Console.WriteLine("yep, they're equal");
}
Console.WriteLine(info1.FullName);
Console.WriteLine(info2.FullName);
Output is:
yep, they're equal
C:\stuff\things\etc\misc\whatever.txt
C:\stuff\things\etc\misc\whatever.txt