如何在电源自动化中多次出现的字符之前获取字符串
How to get string before a character appearing multiple times in power automate
我有这个字符串,我需要在我的日期值开始之前获取第一个字符。例如,如果我的名字是 ZXDER_20201209220430Z,我需要 ZXDER,如果我的名字是 ZXDDFR_IUT_23_20201209220430Z,我需要 ZXDDFR_IUT_23。我如何在 Power automate 中执行此操作。最后一个下划线后的值将始终是日期值。
肯定有更有效的方法来实现这一点,但我认为它会帮助您更好地理解实际发生的事情。代码在屏幕截图下方。这不需要两个变量之间有任何不同。我只是展示了它们如何使用相同的逻辑。
GetAfterUnderScoreStringTest1 =
@{lastIndexOf(variables('StringTest1'), '_')}
GetAfterLastUnderScoreStringTest2 =
@{lastIndexOf(variables('StringTest2'), '_')}
LengthOfString1 =
@{length(variables('StringTest1'))}
LengthOfString2
@{length(variables('StringTest2'))}
String1Delta =
@{sub(variables('LengthOfString1'),variables('GetAfterUnderScoreStringTest1'))}
String2Delta =
@{sub(variables('LengthOfString2'),variables('GetAfterLastUnderScoreStringTest2'))}
字符串 1 =
@{substring(variables('StringTest1'),variables('GetAfterUnderScoreStringTest1'),variables('String1Delta'))}
字符串 2 =
@{substring(variables('StringTest2'),variables('GetAfterLastUnderScoreStringTest2'),variables('String2Delta'))}
简要回答
使用带有 split()
和 take()
函数的表达式,在用下划线将字符串拆分为数组后获取字符串的第一部分。然后 join()
带下划线的结果。
详情
这个表达式一次性完成:
join(take(split(triggerBody()['text'], '_'), sub(length(split(triggerBody()['text'], '_')), 1)), '_')
细分
split(triggerBody()['text'], '_')
根据字符串中的每个下划线将文本拆分为 JSON 数组。
- 为了知道该数组有多长,必须在
length()
函数中再次进行拆分。
length()
计算在 sub()
函数中用于从数组中的总项目中减去 1。
sub()
函数提供表达式将从数组中 take()
的项目总数。
- 最后,
join()
函数将所有项目放入新创建的 take()
数组中以创建一个全新的字符串。
一段时间以来,我一直在打开和关闭数组来解析文本,而且我通常更喜欢它而不是使用 substring()
,但它并不认为子字符串方法是一个有效的选择。通常,与较长的文本一样,它们更合适。
显然你可以把它变得更复杂,例如:
- 通过在日期之后添加数据,这意味着您需要确定一个
日期字符串。
- 或者,如果是我,我可能会添加失败分支来处理该字符串中的错误。
您也可以不使用任何表达式,或者只使用非常简单的表达式,以便以后管理流程的人员能够轻松理解。您只需要将表达式转录到流连接器中即可。
不过,我相信这可以满足您的要求,(当您说“在 Power Automate 中执行一次”时)的意思是一次性完成。
我有这个字符串,我需要在我的日期值开始之前获取第一个字符。例如,如果我的名字是 ZXDER_20201209220430Z,我需要 ZXDER,如果我的名字是 ZXDDFR_IUT_23_20201209220430Z,我需要 ZXDDFR_IUT_23。我如何在 Power automate 中执行此操作。最后一个下划线后的值将始终是日期值。
肯定有更有效的方法来实现这一点,但我认为它会帮助您更好地理解实际发生的事情。代码在屏幕截图下方。这不需要两个变量之间有任何不同。我只是展示了它们如何使用相同的逻辑。
GetAfterUnderScoreStringTest1 =
@{lastIndexOf(variables('StringTest1'), '_')}
GetAfterLastUnderScoreStringTest2 =
@{lastIndexOf(variables('StringTest2'), '_')}
LengthOfString1 =
@{length(variables('StringTest1'))}
LengthOfString2
@{length(variables('StringTest2'))}
String1Delta =
@{sub(variables('LengthOfString1'),variables('GetAfterUnderScoreStringTest1'))}
String2Delta =
@{sub(variables('LengthOfString2'),variables('GetAfterLastUnderScoreStringTest2'))}
字符串 1 =
@{substring(variables('StringTest1'),variables('GetAfterUnderScoreStringTest1'),variables('String1Delta'))}
字符串 2 =
@{substring(variables('StringTest2'),variables('GetAfterLastUnderScoreStringTest2'),variables('String2Delta'))}
简要回答
使用带有 split()
和 take()
函数的表达式,在用下划线将字符串拆分为数组后获取字符串的第一部分。然后 join()
带下划线的结果。
详情
这个表达式一次性完成:
join(take(split(triggerBody()['text'], '_'), sub(length(split(triggerBody()['text'], '_')), 1)), '_')
细分
split(triggerBody()['text'], '_')
根据字符串中的每个下划线将文本拆分为 JSON 数组。- 为了知道该数组有多长,必须在
length()
函数中再次进行拆分。 length()
计算在sub()
函数中用于从数组中的总项目中减去 1。sub()
函数提供表达式将从数组中take()
的项目总数。- 最后,
join()
函数将所有项目放入新创建的take()
数组中以创建一个全新的字符串。
一段时间以来,我一直在打开和关闭数组来解析文本,而且我通常更喜欢它而不是使用 substring()
,但它并不认为子字符串方法是一个有效的选择。通常,与较长的文本一样,它们更合适。
显然你可以把它变得更复杂,例如:
- 通过在日期之后添加数据,这意味着您需要确定一个 日期字符串。
- 或者,如果是我,我可能会添加失败分支来处理该字符串中的错误。
您也可以不使用任何表达式,或者只使用非常简单的表达式,以便以后管理流程的人员能够轻松理解。您只需要将表达式转录到流连接器中即可。
不过,我相信这可以满足您的要求,(当您说“在 Power Automate 中执行一次”时)的意思是一次性完成。