定位一个组的调节问题

conditioning issue to locate a group

如何制作这个正则表达式

(\w|[-zàâçéèêëîïôûùüÿñæœ ])* :((\w|[-zàâçéèêëîïôûùüÿñæœ ])*, [\w]*){1}

同时分开两个测试:

测试:

Gérant : Jean-Pierre LEVENDEAIN, Associé : Toumiat, Farid
Gérant : Jean-Pierre, LEVENDEAIN, Associé : Toumiat, Farid

更新:

问题是我需要 1 个正则表达式来评估两行并生成这些组:

第一种情况:

第二种情况:

我发现的问题是,有时我的文本带有 A: B、C 或 A: B 我需要将两者作为一个组进行匹配

更新:

有一个测试用例我没有考虑

Président : Chateau, Nathalie, nom d'usage : Rudzinski, Directeur général : Montmirel, Joëlle, nom d'usage : Ciocco, Directeur général délégué : Rudzinski, Stéphane

您可以使用

([^,\s][^,]*)\s*:\s*(.*?)(?=[^,]*:|$)

regex demo详情:

  • ([^,\s][^,]*) - 第 1 组:逗号和空格以外的字符,然后是零个或多个非逗号字符
  • \s*:\s* - 用零个或多个空格括起来的冒号
  • (.*?) - 第 2 组:除换行字符外的任何零个或多个字符尽可能少
  • (?=[^,]*:|$) - 与紧随其后的位置相匹配的正面前瞻
    • [^,]*: - 零个或多个非逗号,然后是 : char
    • | - 或
    • $ - 字符串结尾。

JavaScript 演示:

const re = /([^,\s][^,\n]*)\s*:\s*(.*?)(?=[^,\n]*:|$)/gm
const text = `Gérant : Jean-Pierre LEVENDEAIN, Associé : Toumiat, Farid
Gérant : Jean-Pierre, LEVENDEAIN, Associé : Toumiat, Farid
Président : Chateau, Nathalie, nom d'usage : Rudzinski, Directeur général : Montmirel, Joëlle, nom d'usage : Ciocco, Directeur général délégué : Rudzinski, Stéphane.`
const matches = Array.from(text.matchAll(re), x => [x[1].trim(), x[2].trim()])
for (const x of matches) {
  console.log(x)
}