具有多个组的正则表达式,其中一些是可选的

Regex with multiple groups, some of which are optional

我无法匹配多个组,其中一些是可选的。我试过 greedy/non greedy 的变体,但无法正常工作。

作为输入,我有如下所示的单元格:

SEPA Overboeking                 IBAN: AB1234        BIC: LALA678                    Naam: John Smith            Omschrijving: Hello hello        Kenmerk: 03-05-2019 23:12 533238

我想将它们分成 IBAN、BIC、Naam、Omschrijving、Kenmerk 组。

对于这个例子,这会产生:AB1234; LALA678;约翰·史密斯;你好你好; 03-05-2019 23:12 533238。 为了获得这个,我使用了:

.*IBAN: (.*)\s+BIC: (.*)\s+Naam: (.*)\s+Omschrijving: (.*)\s+Kenmerk: (.*)

只要所有这些组都出现在输入中,这就可以完美地工作。但是,有些单元格没有 "Omschrijving" and/or "Kenmerk" 部分。作为输出,如果它们不存在,我希望有空组。现在,没有任何匹配。 我试过 greedy/non greedy 的变体,但无法让它工作。

不胜感激!

N.B.: 我在KNIME(开源数据分析工具)工作

我能够使用以下正则表达式拆分您的输入:

^.*
\s+IBAN\:\s*(?<IBAN>.*?)
\s+BIC\:\s*(?<BIC>.*?)
\s+Naam\:\s*(?<Naam>.*?)
(?:\s+Omschrijving\:\s*(?<Omschrijving>.*?))?
(?:\s+Kenmerk\:\s*(?<Kenmerk>.*?))?
$

这要求您的字段遵循给定的顺序,并将根据需要处理字段 IBANBICNaam。字段 OmschrijvingKenmerk 可能是可选的。我很确定,这仍然可以优化,但它会产生以下输出,这对你来说应该没问题(或者至少是一个起点):

为了在 KNIME 中进行评估和测试,我使用了 Palladian 的 Regex Extractor 节点,它可以按如下方式配置并提供了一个很好的预览功能:

我在 NodePit Space 中添加了一个示例工作流程。它包含一些示例行,解析它们并提供上面看到的输出。