Powershell - удаляет текст и использует заглавные буквы - PullRequest
0 голосов
/ 25 октября 2019

Я почесал голову на этом ...

Я бы хотел удалить .com и использовать S и T с заглавными буквами из: "sometext.com"

Так что вывод будет SomeТекст

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

То, чего вы пытаетесь достичь, не совсем ясно, но вот краткое PowerShell Core решение :

PsCore> 'sometext.com' -replace '\.com$' -replace '^s|t(?!$)', { $_.Value.ToUpper() }

SomeText
  • -replace '\.com$' удаляет литеральный трейлинг .com из вашей входной строки.

  • -replace '^s|t(?!$), { ... } соответствует символу s. в начале (^) и t, то есть , а не (!) в конце ($);(?!...) - это так называемое отрицательное упреждающее утверждение , которое смотрит вперед во входной строке, не включая то, что находит в общем совпадении.

  • Блок сценария{ $_.Value.ToUpper() } вызывается для каждого совпадения и преобразует совпадение в верхний регистр.

  • -replace (он же -ireplace) по умолчанию не учитывает регистр;используйте -creplace для замены с учетом регистра.

Для получения дополнительной информации об операторе PowerShell -replace см. этот ответ .


Передача блока сценария ({ ... }) в динамически определяет, что строка замены не поддерживается в Windows PowerShell, поэтому для решения Windows PowerShell требуется решениепрямое использование .NET [regex] класс :

WinPs> [regex]::Replace('sometext.com' -replace '\.com$', '^s|t(?!$)', { param($m) $m.Value.ToUpper() })

SomeText
0 голосов
/ 25 октября 2019

Для большей части этого вы можете использовать replace () члена объекта String. Синтаксис:

$string = $string.replace('what you want replaced', 'what you will replace it with')

Заменить можно использовать, чтобы стереть вещи, используя пустые кавычки '' для второго аргумента. Вот как вы можете избавиться от .com

$string = $string.replace('.com','')

Он также может быть использован для вставки вещей. Вы можете вставить пробел между некоторыми и текстом следующим образом:

$string = $string.replace('et', 'e t')

Обратите внимание, что использование замены НЕ меняет исходную переменную. Команда ниже выведет «this» на ваш экран, но значение $ string все равно будет «this»

$string = 'this'
$string.replace('this', 'that')

Вы должны установить переменную в новое значение с помощью =

$string = "this"
$string = $string.replace("this", "that")

Эта команда изменит значение $ string на это.

Сложная часть здесь заключается в замене первого t на заглавную T без изменения последнего t. В строках replace () заменяет каждый экземпляр текста.

$string = "text"
$string = $string.replace('t', 'T')

Это установит $ string в TexT. Чтобы обойти это, вы можете использовать Regex. Regex - сложная тема. Здесь просто известно, что объекты Regex выглядят как строки, но их метод замены работает немного по-другому. Вы можете добавить число в качестве третьего аргумента, чтобы указать, сколько элементов заменить

$string = "aaaaaa"
[Regex]$reggie = 'a'
$string = $reggie.replace($string,'a',3)

Этот код устанавливает $ string в AAAaaa.

Итак, вот окончательный код, который нужно изменить sometext.com наНемного текста.

$string = 'sometext.com'
#Use replace() to remove text.
$string = $string.Replace('.com','')
#Use replace() to change text
$string = $string.Replace('s','S')
#Use replace() to insert text.
$string = $string.Replace('et', 'e t')
#Use a Regex object to replace the first instance of a string.
[regex]$pattern = 't'
$string = $pattern.Replace($string, 'T', 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...