Regex для поиска и замены в N ++ числа, за которым следует что угодно - PullRequest
0 голосов
/ 10 января 2019

У меня есть текстовый файл со следующими строками:

asm-java-2.0.0-lib
cib-slides-3.1.0
lib-hibernate-common-4.0.0-beta
astp
act4lib-4.0.0

Я хочу удалить все, включая '-' до начала чисел, чтобы результаты выглядели так:

2.0.0-lib
3.1.0
4.0.0-beta
act4lib

Кто-нибудь знает правильное регулярное выражение для этого? До сих пор я придумал -\D.*(a-z)*, но в нем слишком много ошибок.

Ответы [ 2 ]

0 голосов
/ 10 января 2019
  • Ctrl + H
  • Найти что: ^.*?(?=\d|$)
  • Заменить на: LEAVE EMPTY
  • check Wrap вокруг
  • check Регулярное выражение
  • UNCHECK . matches newline
  • Заменить все

Пояснение:

^           # beginning of line
  .*?       # 0 or more any character but newline, not greedy
  (?=       # start lookahead, zero-length assertion that makes sure we have after
    \d      # a digit
   |        # OR
    $       # end of line
  )         # end lookahead

Результат для данного примера:

2.0.0-lib  
3.1.0  
4.0.0-beta

Другое решение, которое имеет дело с act4lib-4.0.0:

  • * 1 049 * Ctrl + * +1051 * H * ** 1053 тысяча пятьдесят-дв *
  • Найти что: ^(?:.*-(?=\d)|\D+)
  • Заменить на: LEAVE EMPTY
  • check Wrap вокруг
  • check Регулярное выражение
  • UNCHECK . matches newline
  • Заменить все

Пояснение:

^           # beginning of line
  (?:       # start non capture group
    .*      # 0 or more any character but newline
    -       # a dash
    (?=\d)  # lookahead, zero-length assertion that makes sure we have a digit after
   |        # OR
    \D+     # 1 or more non digit
  )         # end group

Замена:

\t          # a tabulation, you may replace with what you want

Дано:

asm-java-2.0.0-lib  
cib-slides-3.1.0  
lib-hibernate-common-4.0.0-beta
astp
act4lib-4.0.0

Результат для данного примера:

2.0.0-lib  
3.1.0  
4.0.0-beta
4.0.0
0 голосов
/ 10 января 2019

Используйте

^\D+\-

Если вы хотите полностью удалить строки без цифр, используйте эту

^\D+(\-|$)

Если пакеты содержат имена в своих именах, такие как act4lib-4.0.0, то необходим более длинный вариант

^[\w-]+(\-(?=\d+\.\d+)|$)

Его можно сократить до ^.+?(\-(?=\d+\.)|$), но я просто хочу быть уверен, поэтому я также проверяю младший номер версии

^ будет совпадать с начала строки

...