Шаблон REGEX для имени пользователя внутри более длинной строки - PullRequest
0 голосов
/ 04 мая 2018

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;) 

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

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

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

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

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

expand-user/([^"]+)

Найдите команду расширения, затем сохраните ее до цитаты.

0 голосов
/ 07 мая 2018

ответ - это то, что написал Дэйв. Я сохранил свои данные в файле (строки с «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?

0 голосов
/ 04 мая 2018
(?:\/.*){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("\""))
...