С Новым годом! Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/74: Рейтинг темы: голосов - 74, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 21.07.2014
Сообщений: 14

Использование оператора "-replace" при замене в строке только первого определённого символа

30.10.2014, 17:19. Показов 15963. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть строка
PowerShell
$str="1231"
Нужно символ заменить на допустим "а".

Но как ему обьяснить, что последний менять не нужно? Т.е.
PowerShell
$str -replace $str[0],"a"
Выводит "a23a", вместо "a231"

Все перерыл, каких только извращений с -replace не нашел, но про это - нигде. причем там очень просто, я знал как, но вылетело!

Выручите, кто знает, пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.10.2014, 17:19
Ответы с готовыми решениями:

Почему функция Replace не работает при замене дат?
Добрый день! у меня возник вопрос: почему функция replace может неработать? суть в том, что replace почему-то не хочет заменять дату...

Определить последнее вхождение символа “р” в строке и вывести строку, начиная с первого символа и до последнего “р” в строке
Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить последнее вхождение символа “р” в строке и вывести строку, начиная с...

Переход на новую строку при нахождении определенного символа в строке
Добрый вечер, Подскажите плз - как сделать переход на новую строчку при нахождении символа в строке ? Пробовал код (не работает): ...

10
1 / 1 / 1
Регистрация: 14.08.2014
Сообщений: 11
31.10.2014, 06:29
разбиваем на массив, меняем, собираем обратно.
PowerShell
1
2
3
4
5
6
7
cls
$b="123"
$b
$c=$b.ToCharArray()
$c[0] = "a"
$b= -join $c
$b
работает.
Косяк в вашей логике в том, что когда вы указывали на str[0], брался не столько первый элемент, сколько его значение, а реплейс менял все совпадающие значения, отсюда и замена последней единицы.
Если надо это делать одной командой, можно код в функцию запихать и далее вызывать уже новую функцию
1
0 / 0 / 0
Регистрация: 21.07.2014
Сообщений: 14
31.10.2014, 11:13  [ТС]
glukonator, спасибо за ответ.
Но может кто знает более короткий вариант? Самое главное я так делал, там просто что то добавить нужно в строчку с -replace.

Добавлено через 58 минут
Удалось найти вот такую конструкцию:
PowerShell
1
$str.insert(0,"a").remove(1,1)
Это вполне сойдет, но всеже существует вариант и с -replace, который не помню :-)
Может кому пригодится.
0
1 / 1 / 1
Регистрация: 14.08.2014
Сообщений: 11
31.10.2014, 11:35
Тогда подозреваю речь идет о регулярных выражениях, если хотите хорошо в них разбираться, то ИМХО без бутылки там не обойтись) Но немного погуглил и пришел к такому варианту:
PowerShell
1
2
3
4
5
cls
$b="123 451"
$symb = $b[0]
$b = $b -replace "^$symb",'a'
$b
Циркумфлекс (^) означает поиск только в начале строки, поэтому этот вариант работает только для первого символа в строке, т.е например цифру 2 уже не поменять таким способом, далее идет подстановка выбранного символа (переменная symb, ибо если прямо в регулярке написать $b[0] - на сработает).

Регулярки - сила в умелых руках, но я в них не силен, гугл в помощь, инет пестрит статьями о них
0
1 / 1 / 1
Регистрация: 11.02.2016
Сообщений: 2
13.05.2018, 14:01
Лучший ответ Сообщение было отмечено Joey как решение

Решение

Время много прошло, но может кому пригодится
PowerShell
1
2
$str="1231"
$str -replace '^.{1}','a'
1
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
14.05.2018, 10:05
Лучший ответ Сообщение было отмечено Joey как решение

Решение

Цитата Сообщение от djindjin Посмотреть сообщение
$str -replace '^.{1}','a'
можно и без {1}

PowerShell
1
$str -replace '^.','a'
2
0 / 0 / 0
Регистрация: 21.07.2015
Сообщений: 70
24.01.2020, 13:51
Народ, привет!
У меня вопрос.
Есть задача резервного копирования.
Предположим, что оно автоматическое, но есть необходимость его сделать вручную, путем запуска скрипта, который это резервное копирование выполняет.
У меня есть цикл, который смотрит, если файл с указанным имененм и переименовывает его, но это однократно, а как сделать, чтобы какждый раз при наличии имени файла оно заменялось?

Код для разового переименования
PowerShell
1
2
3
4
5
6
foreach ($f_1c in $files){
    if ((Test-Path $f_1c) -like 'true'){
        $f = $f_1c.Replace('.dt'f,'_.dt')
        Rename-Item $f_1c -NewName $f
        }
}
Добавлено через 2 минуты
Пробовал сделать так:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
Foreach ($f_1c in $files){
    if ((Test-Path $f_1c) -like 'true'){
        $pf = '.dt'
        $f = $f_1c.Replace($pf,{'_' + $pf})
        Rename-Item $f_1c -NewName $f  
        if ((Test-Path $f) -like 'true'){
            $f = $f.Replace($pf,{'_' + $pf})
            Rename-Item $f -NewName {$f  + '_'}
            } 
        }
}
Но не выходит...
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
24.01.2020, 14:28
Вроде тема от топика отличается. рекомендую новые топики делать.

PowerShell
1
2
3
Get-item 'C:\tmp\out.txt' | ForEach-Object {
    Copy-Item $_.FullName -Destination "$($_.Directory.FullName)\$($_.BaseName)_$(New-Guid)$($_.Extension)"
}
1
0 / 0 / 0
Регистрация: 21.07.2015
Сообщений: 70
24.01.2020, 15:07
Спасибо!
Это вариант!
Я посмотрел, что тема про замену символов и решил что у меня нечто подобное...
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,663
Записей в блоге: 65
24.01.2020, 15:10
lcnet, на здоровье.
0
0 / 0 / 0
Регистрация: 21.07.2015
Сообщений: 70
24.01.2020, 15:18
Только вместо Copy-Item, в моем случае лучше Move-Item
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2020, 15:18
Помогаю со студенческими работами здесь

Поиск и замена только при условии наличия определенного символа перед искомой строкой
Нужно сделать замену в документе word по следующему шаблону: "(не точка);пробел;перенос строки" на "точка;пробел". Помогите...

Ошибка при отладке кода для удаления последнего вхождения определенного символа в заданной строке
Мне нужно в заданный строке удалить последний символ "!", который найдется в строке. Написал такой код: #include...

Копирование только первого символа при условии что первый символ это минус
У меня такой вопрос, возможно ли переделать данную строку кода чтоб он копировал не весь textbox а только минус if (textBox1.Text ==...

Замена первого совпадения в строке через Replace
Не могу сообразить, как сделать, что бы функция Replace делала замену только для первого найденного совпадения. Есть такой код: ...

Замена всех встречающихся символов (replace), а не только первого
Всем привет. Подскажите пожалуйста, как сделать так, чтобы заменялись все необходимые символы, а не только первый #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru