Как определить десятичные значения в строках с помощью регулярного выражения - PullRequest
0 голосов
/ 07 мая 2020

У меня есть следующий SHAKE LQ 1.30 ML (60 MG) PO QD FOR 7 DAYS THEN DR, и я пытаюсь идентифицировать только 30 ML.

Я пробовал следующее, но записал 30 в 1.30 ML.

((30|45|60)(\s)?(ML))

Как не захватить комбинацию целых чисел, которые попадают в десятичные значения.

Ответы [ 3 ]

0 голосов
/ 07 мая 2020

Вы хотите извлечь 30 ML из строки, такой как SHAKE LQ 30 ML (60 MG), и не обнаружить совпадений в строке, например SHAKE LQ 1.30 ML (90 MG).

Вы можете использовать

(?<!\d)(?<!\d\.)((30|45|60)\s?(ML))\b

См. regex demo

Подробности

  • (?<!\d)(?<!\d\.) - без di git и без di git + . разрешено ранее число
  • ((30|45|60)\s?(ML)) - Группа захвата 1:
    • (30|45|60) - Группа захвата 2: 30, 45 или 60
    • \s? - необязательный пробел
    • (ML) - Группа захвата 3: ML
  • \b - граница слова.
0 голосов
/ 07 мая 2020

Попробуйте \d?\.\d+(*SKIP)(?!)|((30|45|60)\s?(ML))

демо

Если не поддерживает pcre

Попробуйте (?<![\d.])((30|45|60)\s?(ML))

демо

0 голосов
/ 07 мая 2020

Десятичное число:

\d+\.\d{2}\s

Пояснение:

\d number
+ one or more preceding character
\. literal dot
{2} exactly two preceding characters
\s white space

EDIT. Недесятичное значение:

[^.]\d{2}\s

Пример в JavaScript:

s1='SHAKE LQ 30 ML (60 MG) PO QD FOR 7 DAYS THEN DR';
s2='SHAKE LQ 1.30 ML (60 MG) PO QD FOR 7 DAYS THEN DR';
r=/[^.]\d{2}\s+ML/
console.log(r.exec(s1)); //returns 30ML in array
console.log(r.exec(s2));  //returns null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...