Регулярное выражение для текстового файла - PullRequest
0 голосов
/ 11 января 2019

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

 andal-4.1.0.jar
 besc_2.1.0-beta
 prov-3.0.jar
 add4lib-1.0.jar
 com_lab_2.0.jar
 astrix
 lis-2_0_1.jar

Есть ли способ разделить имя и версию с помощью регулярных выражений. Я хочу использовать результаты, чтобы сделать два столбца «Имя» и «Версия» в Excel. Поэтому я хочу, чтобы результаты регулярных выражений выглядели как

andal          4.1.0.jar
besc           2.1.0-beta
prov           3.0.jar
add4lib        1.0.jar
com_lab        2.0.jar
astrix
lis            2_0_1.jar

До сих пор я использовал ^(?:.*-(?=\d)|\D+) для получения Версии и -\d.*$ для получения Имени отдельно. Проблема в том, что когда я делаю это для большого текстового файла, результаты двух регулярных выражений не в том же порядке. Так есть ли способ получить результаты так, как я упоминал выше?

Ответы [ 2 ]

0 голосов
/ 11 января 2019
  • Ctrl + H
  • Найти что: ^(.+?)[-_](\d.*)$
  • Заменить на: $1\t$2
  • check Wrap вокруг
  • check Регулярное выражение
  • UNCHECK . matches newline
  • Заменить все

Пояснение:

^           # beginning of line
    (.+?)   # group 1, 1 or more any character but newline, not greedy
    [-_]    # a dash or underscore
    (\d.*)  # group 2, a digit then 0 or more any character but newline
$           # end of line

Замена:

$1          # content of group 1
\t          # a tabulation, you may replace with what you want
$2          # content of group 2

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

 andal  4.1.0.jar
 besc   2.1.0-beta
 prov   3.0.jar
 add4lib    1.0.jar
 com_lab    2.0.jar
 astrix
 lis    2_0_1.jar
0 голосов
/ 11 января 2019

Не совсем уверен, что вы имели в виду для проблемы в большом файле, и я полагаю, что два показанных вами регулярных выражения работают противоположно тому, что вы сказали: первый должен дать вам имя, а второй - версию.

В любом случае, вот предположение, которое я должен догадаться, что может иметь для вас смысл:

  • «Имя» может следовать за - или _, за которым следует строка версии.
  • Строка «Version» - это то, что предшествует - или _, с некоторой цифрой, затем точкой или подчеркиванием, затем цифрой и затем любой строкой.

Если эти предположения имеют смысл, вы можете использовать

^(.+?)(?:[-_](\d+[._]\d+.*))?$

в качестве вашего регулярного выражения. Группа 1 будет именем, Группа 2 будет версией.

Демонстрация в regex101: https://regex101.com/r/RnwMaw/3

Объяснение регулярного выражения

^                                   start of line
 (.+?)                              "Name" part, using reluctant match of 
                                      at least 1 character
      (?:                   )?   Optional group of "Version String", which
                                      consists of:
         [-_]                       - or _
             (             )         Followed by the "Version" , which is 
              \d+                      at least 1 digit, 
                 [._]                  then 1 dot or underscore, 
                     \d+               then at least 1 digit,
                        .*             then any string
                              $   end of line
...