Как обнаружить символ перед номером в RegEx - PullRequest
0 голосов
/ 22 января 2019

У меня есть строка test_demo_0.1.1.

Я хочу в сценарии PowerShell добавить до 0.1.1 некоторый текст, например: test_demo_shay_0.1.1.

Мне удалось обнаружитьсначала наберите RegEx и добавьте текст:

$str = "test_demo_0.1.1"
if ($str - match "(?<number>\d)")
{
    $newStr = $str.Insert($str.IndexOf($Matches.number) - 1, "_shay")-
}
# $newStr = test_demo_shay_0.1.1

Проблема в том, что иногда моя строка содержит число в другом месте, например: test_demo2_0.1.1 (а затем вставка не подходит).

Итак, я хочу определить первое число, которым раньше был символ _, как мне это сделать?

Я пробовал "(_<number>\d)" и "([_]<number>\d)", но оно не работает.

1 Ответ

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

То, что вы просите, называется положительным lookbehind (конструкция, которая проверяет наличие некоторого шаблона непосредственно слева от текущего местоположения):

"(?<=_)(?<number>\d)"
 ^^^^^^

Однако,кажется, все, что вам нужно, это вставить _shay перед первой цифрой, перед которой стоит _.Здесь лучше всего подойдет операция replace:

$str -replace '_(\d.*)', '_shay_$1'

Результат: test_demo_shay_0.1.1.

Подробности

  • _- подчеркивание
  • (\d.*) - Группа захвата # 1: цифра, а затем любые 0+ символов до конца строки.

$1 в шаблоне заменысоответствует ли содержимое группе захвата № 1.

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