我收到包含以下字段的消息。我想对用户输入进行分组和提取。大多数提交都包含所有字段,正则表达式效果很好。当有人删除额外的行时出现问题,如果假设他们只需要填写到金额 1
Name:
Number:
Amount:
Old Code:
Code 1:
Amount 1:
Code 2:
Amount 2:
Code 3:
Amount 3:
Code 4:
Amount 4:
我正在使用 Alteryx 解析消息内容并使用我当前的正则表达式取得成功,但希望为不可避免的用户提交不一致做好准备
Name:(.+)sNumber:(.+)sAmount:(.+)sOld Code:(.+)sCode 1:(.+)sAmount 1:(.+)sCode 2:(.*?)sAmount 2:(.*?)sCode 3:(.*?)sAmount 3:(.*?)sCode 4:(.*?)sAmount 4:(.*?[^-]*)
即使删除了列出的字段,是否可以让 Alteryx 从消息中返回解析结果?
具有新级联正则表达式的 Alteryx 问题
无论如何,您始终可以围绕
行,以匹配某个点的有效内容。
这要求表单行按顺序排列。如果不是,则使用其他类型
的正则表达式是需要的 - 一个乱序的正则表达式(见底部正则表达式(。
这两个正则表达式都适用于 Perl 5.10
(?-ms)Name:(.*)(?:s+Number:(.*)(?:s+Amount:(.*)(?:s+Old[ ]+Code:(.*)(?:s+Code[ ]+1:(.*)(?:s+Amount[ ]+1:(.*)(?:s+Code[ ]+2:(.*)(?:s+Amount[ ]+2:(.*)(?:s+Code[ ]+3:(.*)(?:s+Amount[ ]+3:(.*)(?:s+Code[ ]+4:(.*)(?:s+Amount[ ]+4:(.*?[^-]*))?)?)?)?)?)?)?)?)?)?)?
https://regex101.com/r/9oKXEE/1
对于无序匹配,请使用此
(?m-s)A(?:[Ss]*?(?:(?(1)(?!))^h*Nameh*:h*(.*)|(?(2)(?!))^h*Numberh*:h*(.*)|(?(3)(?!))^h*Amounth*:h*(.*)|(?(4)(?!))^h*Oldh*Codeh*:h*(.*)|(?(5)(?!))^h*Codeh*1h*:h*(.*)|(?(6)(?!))^h*Amounth*1h*:h*(.*)|(?(7)(?!))^h*Codeh*2h*:h*(.*)|(?(8)(?!))^h*Amounth*2h*:h*(.*)|(?(9)(?!))^h*Codeh*3h*:h*(.*)|(?(10)(?!))^h*Amounth*3h*:h*(.*)|(?(11)(?!))^h*Codeh*4h*:h*(.*)|(?(12)(?!))^h*Amounth*4h*:h*(.*?))){1,12}
https://regex101.com/r/f2rG1v/1
在这种情况下,您不需要立即使用正则表达式,并且鉴于数据不一致,可能需要一段时间才能完善一个正则表达式术语......
您可以改为这样做:- 记录ID优先,- 然后,您可以使用带有换行符 (( 分隔符的文本 2 列。将其配置为"拆分为行"。- 然后,您可以使用文本到列在删除":"上拆分。
这将处理输入的其他行等。在该阶段,您可以弄清楚如何清理结果(过滤器以删除空行,多行以标记记录,交叉表以创建表等(。如果要标记任何未知行,可以使用包含所需行的文本输入,并使用"查找/替换"或"联接"分隔数据。