Регулярное выражение сопоставляет весь текст, кроме конечного парантеза, с числом - PullRequest
1 голос
/ 19 марта 2020

Это, вероятно, просто, но я не могу, кажется, правильно asp регулярное выражение. Мне нужно сопоставить символы в строках от начала до парантеза с ди git внутри (если таковой существует). Если за парентезом следует дополнительный текст, вся строка должна совпадать.

Test string (abc) = match "Test string (abc)"
Test string (abc) test = match "Test string (abc) test"
Test string (1) = match "Test string"
Test string (1) Test = match "Test string (1) Test"

У меня есть это, но мне все равно, что внутри парантеза, поэтому сопоставляйте только "тестовую строку", несмотря ни на что.

^[^\(\d\)]+

Кто-нибудь может мне помочь? Большое спасибо!

РЕДАКТИРОВАНИЕ: Добавлена ​​дополнительная тестовая строка (# 4) к моему вопросу, и регулярное выражение Wictor в комментарии также соответствует этому: ^.*?(?=\s*\(\d+\)$|$)

1 Ответ

0 голосов
/ 19 марта 2020

Если вы извлекаете с -match, вы можете использовать

^.*?(?=\s*\(\d+\)|$)

См. Демонстрационную версию regex

Подробнее

  • ^ - начало строки
  • .*? - любые 0+ символов, кроме новой строки, как можно меньше
  • (?=\s*\(\d+\)|$) - положительный прогноз, соответствующий местоположению, за которым сразу следует 0+ пробелов, (, 1+ цифр, ) или конец строки.

Обратите внимание, что вы можете попробовать заменить подход на

$line -replace '\s*\(\d+\).*'

, где \s*\(\d+\).* соответствует 0+ пробелов, (, 1+ цифр, ), а затем весь остаток строки с .*.

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