В Powershell вы можете получить имя файла без расширения, разбить строку на .
и получить первую итеру:
PS> $s = '\ABCD\E$\FGHI$\BAB-COM-DEP_XYZ\TAM\england.CLSM.IST'
PS> [System.IO.Path]::GetFileNameWithoutExtension($s).Split('.')[0]
england
Если по какой-либо причине вам нужно регулярное выражение, я предлагаю использовать
.*\\([^.]+)
и получите значение группы 1. Смотрите regex demo .
Детали
.*\\
- сопоставить весь текст вплоть до последнего символа \
включительно (поскольку .*
является жадным подшаблоном)
([^.]+)
- Группа 1: один или несколько символов, отличных от .
Альтернативное регулярное выражение может выглядеть как
([^.\\]+)[^\\]*$
См. еще одну демонстрацию регулярных выражений .
Детали
([^.\\]+)
- Группа 1: один или несколько символов, отличных от .
и \
[^\\]*$
- 0 или более символов, отличных от \
до конца строки ($
).
Использование Powershell :
PS> $s -match '([^.\\]+)[^\\]*$' | Out-Null
PS> $matches[1]
england
Если вам нужно регулярное выражение, которое будет возвращать необходимую строку напрямую , вы можете использовать
$s -replace '.*\\([^\\.]+)[^\\]*$', '$1'
См. Демоверсию .NET
.*
- сопоставить любые 0+ символов как можно больше
\\
- \
char
([^\\.]+)
- Группа 1 (обозначается $1
): соответствует и использует один или несколько символов, отличных от \
и .
[^\\]*$
- 0+ символов, отличных от \
([^\\]*
) и конец строки ($
).