регулярное выражение мультилинии с различной длиной - PullRequest
0 голосов
/ 04 февраля 2020

У меня многострочный текст.

Leui Centum 07 Base 9GALLON  
2020-02-10  
1,00 kg  461,90 461,90710201449  
3899104400  
EAN13 7344236003355

Leui Centum 07 Base 9GALLON  
2020-02-10  
1,00 kg  159,62 159,62050223  
3248900000  
EAN13 7358962113386

Ну, я некоторое время пытался получить последние символы после второго десятичного знака в строке 3

Если вся строка выглядит так:

1,00 kg  159,62 159,62050223

^\d,?[,$].+,.. с регулярным выражением: полученное значение равно

1,00 kg  159,62 159,62

, но моя цель - получить значение, выделенное жирным шрифтом.

1,00 кг 159,62 159,62 050223
1,00 кг 461,90 461,90 710201449

, как вы можете видеть длина не совпадает, поскольку строки во всем тексте являются цифрами. когда я пытаюсь использовать $, я получаю все строки, кроме первой. и я не могу понять, как убежать, чтобы получить только 3-ю строку, я не могу использовать ., потому что длина различна. какие-либо предложения?

Ответы [ 3 ]

0 голосов
/ 04 февраля 2020

Ваше регулярное выражение очень свободно, посмотрите этот пример https://regex101.com/r/7qVM6W/1 Вам нужно взглянуть на фактические требования для строки 3, всегда ли это будет в формате, который вы предлагаете? если это так, возможно, попробуйте следующее регулярное выражение с группой захвата, чтобы получить последние символы.

вопросов, которые нужно задать

  1. всегда ли значение имеет одинаковую форму?
  2. всегда ли это кг
  3. значение в конце всегда число?

https://regex101.com/r/7qVM6W/2

^(\d+,?)+\d+ (kg|lb|ton) (\d+,?)+\d+ \d{3},\d{2}(?<VALUE>\d+)

ЗНАЧЕНИЕ вам Будешь в финальной группе захвата

0 голосов
/ 04 февраля 2020

Я бы использовал тот факт, что значение непосредственно перед желаемым значением отображается дважды . С этим предварительным предложением мы можем знать, с чего начать сбор искомого значения!

Это можно сделать с помощью группы захвата и ссылки на эту группу.

Регулярное выражение будет ^[\d,]+\s+kg\s+([\d,]+)\s+\1(\d+)\s*$ с i (без учета чувствительности) и m (^ и $ совпадают строки, начинающиеся и заканчивающиеся).

Проверьте это здесь: https://regex101.com/r/C0PpRG/2

Объяснение:

  • ^[\d,]+ будет совпадать с числами и запятыми один или несколько раз.

  • \s+ для одного или нескольких пробелы.

  • kg\s+ для слова kg без учета регистра с несколькими пробелами после.

  • ([\d,]+) для захвата первого значения например 461,90 или 159,62.

  • \1 является ссылкой на эту захваченную группу.

  • (\d+) вторая группа, которую вы ищете: -)

0 голосов
/ 04 февраля 2020

Я смог достичь этого с помощью этого простого регулярного выражения:

.*kg.*(\b\d+$)

Объяснение: Найдите строку, в которой есть «кг», и введите число в конце строки в группа захвата. Обязательно включите флаг multiline .

Демонстрация на regex101.com: https://regex101.com/r/U9PQ8I/1/

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