Шаблон REGEX для имени пользователя внутри более длинной строки

MAC OSX, PowerShell 6.1 Core

Я борюсь с созданием правильного шаблона REGEX, чтобы найти строку имени пользователя в середине URL-адреса. Короче говоря, я работаю в Powershell Core 6.1, работаю над веб-страницей и удаляю элементы "li". Я пишу это в файл, поэтому у меня есть несколько строк, как это:

<LI><A HREF="/grouplist/expand-user/jimmysmith">Smith, Jimmy</A>&nbsp;

Строка, в которой я нуждаюсь, является частью "jimmysmith", и каждая строка будет иметь другое имя пользователя, не более восьми буквенных символов. Моя текущая модель такова:

(<(.|\n)+?>)|(&nbsp;) 

и я могу использовать шаблон "-relace $" в своем коде, чтобы получить часть "Смит, Джимми". Я понятия не имею, что я делаю, и любой успех в получении того, что я получил, был счастливой случайностью.

После использования нескольких онлайн-помощников регулярных выражений я все еще застрял на том, как просто получить "строку после третьего" / и до, но не включая последнюю цитату.

Спасибо за любую помощь, которую вы можете оказать мне.

3 ответа

Вы могли бы пойти очень просто,

expand-user/([^"]+)

Найти расширения-пользователя, а затем захватить до цитаты.

Ответ - то, что было отправлено Дэйвом. Я сохранил свои данные в файле (строки с "li"), выполнив:

get-content .\list.txt -ReadCount 1000| foreach-object { $_ -match "<li>"} |out-file .\transform.txt

Затем я использовал метод, предложенный Дейвом, следующим образом:

$a = get-content .\transform.txt |select-string -pattern '(?:\/.*){2}\/(?<username>.*)"' | % {"$($_.matches.groups[1])"} |out-file .\final.txt

Мне пришлось посмотреть, как вытащить имя группы, и я воспользовался этой ссылкой, чтобы понять это: как получить захваченные группы из Select-String?

(?:\/.*){2}\/(?<username>.*)"

(?:\/.*) Соответствует буквальному / с последующим любым количеством символов

{2} сделать предыдущий матч два раза

\/ соответствовать другому /

(?<username>.*)" сопоставить все до следующего " и положить его в username группа.

https://regex101.com/r/0gj7yG/1

Хотя, поскольку каждая строка предположительно идентична вплоть до имени пользователя:

$line = ("<LI><A HREF=\"/grouplist/expand-user/jimmysmith\">Smith, Jimmy</A>&nbsp;")
$line = $line.Substring(36,$line.LastIndexOf("\""))
Другие вопросы по тегам