powershell: удалить текст с конца строки - PullRequest
5 голосов
/ 29 апреля 2011

- удалил предыдущий текст - я задал неправильный вопрос!

Гм ....

Что у меня есть $var = "\\unknowntext1\alwaysSame\unknowntext2"

Мне нужно оставить только"\\unknowntext1"

Ответы [ 3 ]

6 голосов
/ 29 апреля 2011

Попробуйте регулярные выражения:

$foo = 'something_of_unknown' -replace 'something.*','something'

Или, если вы знаете только «что-то», то, например,

'something_of_unknown' -replace '(some[^_]*).*','$1'
'some_of_unknown' -replace '(some[^_]*).*','$1'
'somewhatever_of_unknown' -replace '(some[^_]*).*','$1'

$1 - это ссылка на группу в скобках ((some[^_]*) part).

Редактировать (после измененного вопроса):

Если вы используете регулярное выражение, тогда необходимо экранировать специальные символы:

"\\unknowntext1\alwaysSame\unknowntext2" -replace '\\\\unknowntext1.*', '\\unknowntext1'

или (другая магия регулярных выражений) используйте lookhehind как это:

"\\unknowntext1\alwaysSame\unknowntext2" -replace '(?<=\\\\unknowntext1).*', ''

(то есть: возьмите что-нибудь (.*), но перед ним должно быть \\unknowntext1 ('(?<=\\\\unknowntext1)) изамените его пустой строкой.

Редактировать (последний)

Если вы знаете, что в середине что-то известно (alwaysSame), это может помочь:

"\\unknowntext1\alwaysSame\unknowntext2" -replace '(.*?)\\alwaysSame.*', '$1'
5 голосов
/ 29 апреля 2011
function Remove-TextAfter {   
    param (
        [Parameter(Mandatory=$true)]
        $string, 
        [Parameter(Mandatory=$true)]
        $value,
        [Switch]$Insensitive
    )

    $comparison = [System.StringComparison]"Ordinal"
    if($Insensitive) {
        $comparison = [System.StringComparison]"OrdinalIgnoreCase"
    }

    $position = $string.IndexOf($value, $comparison)

    if($position -ge 0) {
        $string.Substring(0, $position + $value.Length)
    }
}

Remove-TextAfter "something_of_unknown" "SoMeThInG" -Insensitive
3 голосов
/ 21 октября 2014

У меня есть $ var = "\ unknowntext1 \ alwaysSame \ unknowntext2"

Мне нужно оставить только "\ unknowntext1"

Не уверен, что для этого требуется регулярное выражение. Предполагая, что alwaysSame в буквальном смысле всегда одно и то же, как предполагает обсуждение ответа Stej, кажется, что наиболее простой способ сделать это:

$var.substring(0, $var.indexOf("\alwaysSame"));

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