Вопрос или проблема
Если у меня есть данные, такие как
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). В вашем случае вы хотите получить значение <0.001
только из строки DAAR BR 37291 Y%oVol <0.001
.
Правильное регулярное выражение для этой задачи будет следующее:
^DAAR.*?(\s*<[0-9]+\.[0-9]+)
Объяснение регулярного выражения:
- ^DAAR – Указывает на то, что строка должна начинаться со слова "DAAR".
- *.?** – Это не жадный квантификатор, который позволяет захватить любое количество символов после "DAAR", включая пробелы, до момента, когда мы достигнем интересующей нас подстроки.
- *(\s<[0-9]+.[0-9]+)** – Группа захвата, которая находит пробел перед
<
, затем сам символ<
, за которым следует число с десятичной точкой. Эта часть выражения непосредственно соответствует искомому значению.
Пример применения в Power Automate:
В Power Automate (PAD) вы можете использовать этот Regex для фильтрации ваших данных. Вот пример, как это может быть реализовано в контексте вашего кода:
LOOP FOREACH CurrentItem IN FileContents
IF Regex.Match(Text: CurrentItem, Pattern: $'''^DAAR.*?(\s*<[0-9]+\.[0-9]+)''')
THEN
Regex.GetMatch(Text: CurrentItem, Pattern: $'''^DAAR.*?(\s*<[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=> ButtonPressed
END
END
В этом коде мы используем Regex.Match
, чтобы проверить, соответствует ли текущая строка вашему шаблону. Если соответствует, используя Regex.GetMatch
, мы извлекаем и выводим конечное значение.
Заключение
Таким образом, с помощью приведенного регулярного выражения и примера кода, вы сможете извлечь нужное значение только из строки, начинающейся с "DAAR". Обратите внимание, что данный метод будет работать только в рамках формата ваших данных, как указано в примере. Если у вас возникнут дополнительные вопросы или потребуется помощь с другими строками, не стесняйтесь обращаться!