Попытка получить десятичное число из строки - PullRequest
1 голос
/ 13 июля 2020

В текстовом файле я ищу часть документа, содержащую такой фрагмент, как min ISO 1133 0.2-0.35. То, что я хочу захватить, - это ранжированная десятичная часть этого фрагмента текста (0.2-0.35). Поскольку существуют и другие десятичные числа с ранжированием, я не могу просто использовать регулярное выражение для поиска только ранжированной части. До сих пор я мог сделать min.*(\d+)((?:\.)?)(\d*)-(\d+)((?:\.)?)(\d*), но результат неправильный, и я застрял. Может ли кто-нибудь помочь мне с этим?

Ниже вы можете увидеть окончательный результат (желтая часть):

введите описание изображения здесь

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

Может быть, вам подойдет следующее?

\bmin\s.*?(\d+(?:\.\d+)?)-(\d+(?:\.\d+)?)

См. Онлайн демо

Ответ в настоящее время основан на предположении (глядя на вашу текущую попытку ) вы хотите, чтобы эти диапазоны были разделены на отдельные группы. Однако, если нет, этот ответ можно быстро преобразовать, чтобы захватить всю подстроку (или см. Ответ @ TheFourthBird).

  • \b - соответствие границы слова.
  • min - Буквально соответствует "min".
  • \s - Соответствует пробельному символу.
  • .*? - Соответствует любому символу, кроме новой строки, до (ленивый):
  • ( - открыть 1-ю группу захвата
    • \d+ - хотя бы один di git.
    • (?: - открыть группу без захвата.
      • \.\d+ - сопоставить буквальную точку и хотя бы один di git.
      • )? - закрыть группу без захвата и сделать ее необязательной.
    • ) - закрыть 1-ю группу захвата.
  • - сопоставить буквальный дефис.
  • ( - открыть вторую группу захвата
    • \d+ - хотя бы один di git.
    • (?: - Открыть группу без захвата.
      • \.\d+ - сопоставить буквальную точку и хотя бы один di git.
      • )? - закрыть группу без захвата и сделать ее необязательной.
    • ) - Закрыть 2-ю группу захвата.
2 голосов
/ 13 июля 2020

Вы можете получить десятичную часть, соответствующую 1+ di git в необязательной части, и сделать квантификатор не жадным. Значение находится в захвате группа 1 .

\bmin [A-Z]+ [0-9]+ ([0-9]+(?:\.[0-9]+)?-[0-9](?:\.[0-9]+)?)\b

Regex demo

Или немного подробнее c шаблон

\bmin [A-Z]+ [0-9]+ ([0-9]+(?:\.[0-9]+)?-[0-9]+(?:\.[0-9]+)?)\b

Демо Regex

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