Регулярное выражение для захвата конечного значения, если строка начинается с

Вопрос или проблема

Если у меня есть данные, такие как

DAAR BR 37291 Y%oVol <0.001
Bil2 CH 382 %Mass 0.01
JOL BR 444489 Vol 44.4
TOME BR 37291 Y%oVol <0.005

Я хочу захватить конечное значение для DAAR (<0.001), но не для других строк, используя REGEX, который я могу вставить в PAD.

Я знаю, что (\s\<\d\.\d*) захватит <0.001, но не могу найти способ применить это только к DAAR.

Короче говоря, то, что находится между DAAR и <0.001, может быть чем угодно.

Регулярные выражения в Power Automate проблематичны. Также, хотя он может обрезать текст перед первым вхождением пробела, он не может обрезать текст после последнего вхождения.

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

схема для обрезки текста после последнего пробела

LOOP FOREACH CurrentItem IN FileContents
    Text.CropText.CropTextBeforeFlag Text: CurrentItem ToFlag: $'''%' '%''' IgnoreCase: False CroppedText=> CroppedText IsFlagFound=> IsFlagFound
    IF IsFlagFound = $'''true''' THEN
        IF CroppedText = $'''%'DAAR'%''' THEN
            Text.Reverse Text: CurrentItem ReversedText=> ReversedItem
            Text.CropText.CropTextBeforeFlag Text: ReversedItem ToFlag: $'''%' '%''' IgnoreCase: False CroppedText=> CroppedReversedText IsFlagFound=> IsFlagFound
            IF IsFlagFound = $'''true''' THEN
                Text.Reverse Text: CroppedReversedText ReversedText=> CroppedText
                Display.ShowMessageDialog.ShowMessage Title: $'''Обрезанный текст''' Message: CroppedText Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed
            END
        END
    END
END

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

Ответ или решение

Для решения задачи извлечения конечного значения из строки, начинающейся с "DAAR", и состоящей в определенном формате, можно использовать регулярные выражения (Regex). В вашем случае вы хотите получить значение &lt;0.001 только из строки DAAR BR 37291 Y%oVol &lt;0.001.

Правильное регулярное выражение для этой задачи будет следующее:

^DAAR.*?(\s*&lt;[0-9]+\.[0-9]+)

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

  1. ^DAAR – Указывает на то, что строка должна начинаться со слова "DAAR".
  2. *.?** – Это не жадный квантификатор, который позволяет захватить любое количество символов после "DAAR", включая пробелы, до момента, когда мы достигнем интересующей нас подстроки.
  3. *(\s<[0-9]+.[0-9]+)** – Группа захвата, которая находит пробел перед <, затем сам символ <, за которым следует число с десятичной точкой. Эта часть выражения непосредственно соответствует искомому значению.

Пример применения в Power Automate:

В Power Automate (PAD) вы можете использовать этот Regex для фильтрации ваших данных. Вот пример, как это может быть реализовано в контексте вашего кода:

LOOP FOREACH CurrentItem IN FileContents
    IF Regex.Match(Text: CurrentItem, Pattern: $'''^DAAR.*?(\s*&lt;[0-9]+\.[0-9]+)''')
        THEN
            Regex.GetMatch(Text: CurrentItem, Pattern: $'''^DAAR.*?(\s*&lt;[0-9]+\.[0-9]+)''') 
            Display.ShowMessageDialog.ShowMessage Title: $'''Значение''' Message: Regex.GetMatch.Result Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=&gt; ButtonPressed
        END
END

В этом коде мы используем Regex.Match, чтобы проверить, соответствует ли текущая строка вашему шаблону. Если соответствует, используя Regex.GetMatch, мы извлекаем и выводим конечное значение.

Заключение

Таким образом, с помощью приведенного регулярного выражения и примера кода, вы сможете извлечь нужное значение только из строки, начинающейся с "DAAR". Обратите внимание, что данный метод будет работать только в рамках формата ваших данных, как указано в примере. Если у вас возникнут дополнительные вопросы или потребуется помощь с другими строками, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...