Regex для получения значения из строки - PullRequest
1 голос
/ 15 октября 2019

Можете ли вы помочь мне получить какое-то значение из этой строки, которое ниже

ldn2spc2.ebrd.comDiskUtilization-D(Disk) --> Disk Utilization 100 > 95
%(threshold)

Я хочу получить букву диска, которая в данном случае перед " Диск "'D'.

Я пробовал это регулярное выражение

ebrd.comDiskUtilization-(\D*)\ --

, которое дает D(Disk), но мое требование - выбрать только букву диска. Пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 15 октября 2019

Похоже, вы используете Javascript. Если я правильно понимаю, это регулярное выражение будет записывать только букву диска в качестве группы захвата 1:

ebrd.comDiskUtilization - ([A-Za-z]) \ D * \ -

С учетом сказанного, я склонен думать, что решение Sterconium является лучшим, более элегантным решением. Если вам нужно, чтобы буква диска была группой захвата, вы можете поставить круглые скобки вокруг \ w - в этом случае это будет группа захвата 2.

0 голосов
/ 15 октября 2019

В вашем паттерне вы захватываете группу 1 (\D*), совпадающую 0+ раз, а не цифра, за которой следует пробел и 2 тире \ --.

Использование \D также будет соответствовать (Disk), так как оно не содержит цифр.

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

ebrd\.comDiskUtilization-([A-Z])\([^)]+\) --

По частям

  • ebrd\.comDiskUtilization- Совпадение буквально
  • ( Захват группа 1
    • [A-Z] Соответствует символу в верхнем регистре AZ
  • ) Закрыть группу
  • \([^)]+\) Соответствует от открывающей до закрывающей скобки, используя отрицательный класс символов
  • -- Совпадение с пробелом и --

Буква диска будет в группе захвата 1.

Regex demo

0 голосов
/ 15 октября 2019

Правильный ответ во многом зависит от используемого вами механизма RegEx. К сожалению, иногда это нелегко узнать.

Я проверил ваш текст с помощью двигателя PCRE 8.41 2017-07-05 и получил 'D' с регулярным выражением:

((\w+[\.-])+)\K\w(?=\(Disk\))

Но это не работает, например, с Javascript Chrome . Вместо этого я могу использовать это:

(?<=(\w+[\.-])+)\w(?=\(Disk\))

Попробуйте оба варианта и посмотрите, какой из них вам подходит.

...