Удалить последнее слово в строке, если оно не соответствует определенному слову

Я хочу удалить любое слово в конце строки, кроме слова «деньги».

«Привет, Моне» должно быть «Привет» «Привет, деньги» должно быть «Привет, деньги»

Я провел много часов и ничего не произошло..

'Hellow money' -replace '.*[^money]$'

пожалуйста, укажите код сценария, который вы пробовали

Mr.Key7 21.04.2024 17:43

Это очень просто. Код представляет собой одну строку, и он не работает так, как я хочу: «Hello Money» -replace «.*[^money]$» Если изменить на «Hello monet», строка будет удалена целиком. Но я хочу только последнее слово

Oleg0341 21.04.2024 17:59
$A = 'Hello Monet'; $A = $A.Replace('Monet',''); $A. Это просто пример
Mr.Key7 21.04.2024 18:08

Вы немного неправильно поняли. Мне нужно удалить все последнее слово, кроме «деньги». Например «Hello world» — последнее слово «world» также следует удалить. мне нужно регулярное выражение

Oleg0341 21.04.2024 19:11

Я рассказал, просто пример для одной переменной. Если их несколько, вы используете ForEach, -match, .EndsWith() и т. д.

Mr.Key7 21.04.2024 19:19
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
5
107
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Разбить его на две части? Строка выбора в PowerShell 7 выделяет совпадения с регулярными выражениями, поэтому ее удобно опробовать шаблоны регулярных выражений (или regex101.com). \w — символы в слове. [^money]$ смотрит на каждого персонажа отдельно, например [^y]$.

'Hello monet','Hello money' |
foreach-object {
  if ( $_ -match '\Wmoney$' ) {  # non word character added
    $_ 
  }
  else {
    $_ -replace '\w*$'    
  }
}
Hello
Hello money

ФП, возможно, придется уточнить крайний случай - что, если в последнем слове в качестве суффикса есть слово «деньги» - например. «привет loadamoney» — поскольку последнее слово не равно «деньги», следует его удалять или нет…

mclayton 21.04.2024 19:28

Оно работает! Спасибо. Но можно ли использовать регулярное выражение без условия?

Oleg0341 21.04.2024 19:33

Возможно, они меня не понимают. У меня всегда одна строчка, просто меняется содержание. «Привет, мир!», «Привет, деньги» или «Привет всем!»

Oleg0341 21.04.2024 19:37

Я пытаюсь не что-то подобное, и это не работает :) 'Hello monet' -replace '(Hello)\s+(!(money))','$1'

Oleg0341 21.04.2024 19:39

Мне нужно как-то использовать отрицание, но я не могу понять, как

Oleg0341 21.04.2024 19:40

ок, отвечаю на ваш первый вопрос - возможно, последнее слово может содержать суффикс

Oleg0341 21.04.2024 19:47

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

Mr.Key7 21.04.2024 20:34
Ответ принят как подходящий

Вы можете использовать шаблон \s(?!money$).* для одиночных линий. Подробности смотрите https://regex101.com/r/RBueqz/2.

'Hello monet', 'Hello money' -replace '\s(?!money$).*'

# Outputs:
# Hello
# Hello money

И (?m)(?<=^\S*)\s(?!money$).* для многострочных строк. Подробности смотрите https://regex101.com/r/e5H76U/1.

@'
Hello monet
Hello money
'@ -replace '(?m)(?<=^\S*)\s(?!money$).*'

Можно ли это упростить до '\s(?!money$).*', используя только пробел, отрицательный просмотр вперед и второе слово?

js2010 22.04.2024 06:23

Если $ обозначает конец строки, что делает .* после него?

lit 23.04.2024 03:21

@lit удалить все после пробела, включая его

Santiago Squarzon 23.04.2024 03:25

@lit $ находится внутри отрицательного просмотра, но .* на самом деле соответствует второму слову

js2010 23.04.2024 14:46

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