Можно ли удалить подстроку из строки, начиная с известной позиции и заканчивая данным символом? - PullRequest
0 голосов
/ 08 января 2019

Мне нужно извлечь фрагменты строки, но я не всегда буду знать длину / содержание.

Я пытался преобразовать строку, например, в XML или JSON, и не могу придумать другого способа добиться того, что я ищу.

Пример строки:

'Other parts of the string Name="SomeRandomAmountOfCharacters" blah blah'

То, что мне нужно удалить, всегда начинается с имени атрибута и заканчивается закрывающей двойной кавычкой. Так могу ли я сказать, что хотел бы удалить подстроку, начинающуюся с Name = ", и идти до тех пор, пока мы не достигнем закрытия"?

Ожидаемый результат:

'Other parts of the string blah blah'

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Посмотрите на что-то подобное и поймите, как это работает.

$pattern = '(.*)Name=".*" (.*)'
$str = 'Other parts of the string Name="SomeRandomAmountOfCharacters" blah blah'

$ret = $str -match $pattern

$out = $Matches[1]+$Matches[2]

$str
"===>"
$out

Смотри также: https://regex101.com/r/wM2xlc/1

0 голосов
/ 08 января 2019

Вы захотите сделать что-то вроде этого

$s = 'Other parts of the string Name="SomeRandomAmountOfCharacters" blah blah'
$s -replace ' Name=".*?"'

или как это:

$s = 'Other parts of the string Name="SomeRandomAmountOfCharacters" blah blah'
$s -replace ' Name="[^"]*"'

, чтобы избежать непреднамеренного удаления других частей вашей строки, если она содержит несколько атрибутов или дополнительные двойные кавычки. .*? - это не жадное совпадение для последовательности любого символа, кроме символов новой строки, поэтому оно будет соответствовать следующей двойной кавычке. [^"]* - это класс символов, соответствующий самой длинной последовательности символов, которые не являются двойными кавычками, поэтому он также будет соответствовать следующей двойной кавычке.

Вы также захотите добавить разную конструкцию (?ms) в выражение, если у вас есть многострочная строка.

0 голосов
/ 08 января 2019

Вот хорошая ссылка: https://www.regular -expressions.info / powershell.html

В вашем случае

$s = 'Other parts of the string Name="SomeRandomAmountOfCharacters" blah blah'
$s -replace '\W*Name=".*"\W*', " "

или

$newString = $s -replace 'W*Name=".*"\W*', " "

Это заменит вашу совпадающую строку, включая окружающие пробелы, одним пробелом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...