PowerShell Regex: удаление определенных частей строки на основе шаблонов

Я хочу удалить все ненужные части строки, оставив только имя. Я не получаю ожидаемого результата. Вместо просто «Аришенский, Михаил» получаю пустую строку. Что я делаю не так и как я могу изменить свой код для достижения желаемого результата?

$text = "CN=Aryshenskyi\, Mihail,OU=Users,OU=SMZ,DC=smzmi,DC=local"
$regex = "(CN=).+?(\\), .+?(,OU=.+)"
$result = $text -replace $regex, ""
Write-Host $result
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете адаптировать регулярные выражения, найденные в этих ответах , с помощью -replace, чтобы извлечь общее имя, а затем применить другую замену для обратной косой черты. См. https://regex101.com/r/Clg5xj/1 для получения подробной информации о регулярном выражении.

$text = "CN=Aryshenskyi\, Mihail,OU=Users,OU=SMZ,DC=smzmi,DC=local"
$text -replace '^CN=|(?<!\\),.+' -replace '\\'

Вы можете адаптировать регулярное выражение, которое у вас сейчас есть, чтобы оно работало с помощью одной замены, однако это работает только для отличительных имен, имеющих экранированную запятую в их общем имени. Это также не сработает для пользователей в контейнере, а не в подразделении. См. https://regex101.com/r/46Xa2V/1 для получения подробной информации о регулярном выражении.

$text = "CN=Aryshenskyi\, Mihail,OU=Users,OU=SMZ,DC=smzmi,DC=local"
$text -replace '^CN=(.+?)(?:\\)(, .+?),OU=.+', '$1$2'

Добавление еще одного параметра, который должен обрабатывать замену за один раз, включая удаление обратной косой черты, экранирующей запятую в общем имени. См. https://regex101.com/r/YuGge3/1 для получения подробной информации о регулярном выражении.

$dns = @(
    'CN=Aryshenskyi\, Mihail,OU=Users,OU=SMZ,DC=smzmi,DC=local'
    'CN=Aryshenskyi Mihail,OU=Users,OU=SMZ,DC=smzmi,DC=local'
)

$dns -replace '^CN=|\\(?=,)|(?<!\\),.+'

Но почему мое регулярное выражение не работает? Я проверил сайт regex101, он фиксирует "CN = "; "\"; ",OU=Пользователи,OU=SMZ,DC=smzmi,DC=local". Почему удаление части не работает?

user2978216 05.09.2024 06:57

Вы захватываете CN= и все, что после OU=, включая его в группы захвата 1 и 2, вместо того, чтобы захватывать то, что вы хотите извлечь @user2978216. увидеть обновление, близкое к тому, что вы планировали

Santiago Squarzon 05.09.2024 07:02

Шаблон соответствует всей строке. Возвращаем фамилию и имя, добавляем еще две группы захвата. Посетите regex101.com, чтобы проверить выражения. Строка выбора в PowerShell 7 выделяет совпадения.


'CN=Aryshenskyi\, Mihail,OU=Users,OU=SMZ,DC=smzmi,DC=local' -replace 
  '(CN=)(.+?)(\\), (.+?)(,OU=.+)', '$2, $4'

Aryshenskyi, Mihail

Вам действительно не нужны другие группы захвата:

'CN=Aryshenskyi\, Mihail,OU=Users,OU=SMZ,DC=smzmi,DC=local' -replace
  'CN=(.+?)\\, (.+?),OU=.+', '$1, $2'

Aryshenskyi, Mihail

Или же используйте регулярный просмотр вперед или назад. Или вместо этого получите свойства Active Directory GiveName и Surname или DisplayName.

Другие вопросы по теме

Похожие вопросы

Удаление всех слов, кроме первой буквы, с помощью регулярного выражения в LibreOffice Writer
Почему некоторые функции регулярных выражений возвращают объект соответствия, а некоторые нет?
Регулярное выражение для проверки того, содержит ли ввод две заданные строки, а часть между ними не содержит ни одного элемента из набора указанных строк
Regex: сопоставить кратчайший шаблон между двумя возможными разделителями
Использованиеdependent_wider_regex для создания новой строки для каждого совпадения в R
Добавить новые строки перед выбранными символами дефиса
Написание Regex для обработки дополнительных символов с плавающей запятой в начале строки?
Как извлечь из строки только уникальные значения, используя регулярное выражение в Python?
Регулярное выражение для соответствия таким символам, как ┼, ▓, ┐, ╔, ╠, ═, ╩, �
DotNet эквивалент Java Matcher.hitEnd()