Удалить все из строки перед данной переменной - PullRequest
2 голосов
/ 26 июня 2019

У меня есть строка some\string/with/**/special\chars\haha.В переменной я держу chars строку и пытаюсь удалить все до и включая chars, поэтому ожидаемый результат будет \haha

Я пробовал что-то вроде:

$temp = "some\string/with/**/special\chars\haha"
$tmp="chars"
$temp -replace '(?s)^.*$tmp', ''

и

$temp -replace '(?s)^.*$([regex]::Escape($tmp))', ''

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

$temp -replace '(?s)^.*chars', ''

Что я делаю не так?

Редактировать .: Мне нужно использовать переменную в регулярном выражении, потому что я перебираю несколькоСтроки, подобные этой, и не всегда та часть, которую я хочу удалить, имеет одинаковую строку (пример: some\string/with/**/special\chars\haha -> \haha; C:\st/h/*/1234\asdf\x -> \x).Итак, в заключение у меня проблема с использованием переменной в регулярном выражении, а не с самим регулярным выражением, поскольку это работает, как и предполагалось, когда я заменяю переменную на строку (как показано выше)

Ответы [ 2 ]

3 голосов
/ 26 июня 2019

Попробуйте

$temp = "some\string/with/**/special\chars\haha"
$tmp="chars"
$regex = '(?s)^.*' + $tmp
$temp -replace $regex, ''
0 голосов
/ 26 июня 2019

Похоже, это потому, что вы используете одинарные кавычки в своем регулярном выражении вместо двойных кавычек. Это означает, что переменная $tpm не используется.

Вот как должен выглядеть ваш код:

$temp = "some\string/with/**/special\chars\haha"
$tmp="chars"
$temp -replace "(?s)^.*$tmp", ''

Ваш код использовал $ tmp вместо фактического значения в переменной $ tmp.

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