条件问题定位组



如何使这个正则表达式

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

同时分离两个测试:

测试:

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

更新:

问题是我需要一个正则表达式来计算这两行并产生这些组:

第一个例子:

  • gsamant: Jean-Pierre LEVENDEAIN,
  • 关联:Toumiat, Farid

第二个案例:

  • gsamant: Jean-Pierre, LEVENDEAIN
  • 关联:Toumiat, Farid

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

更新:

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

总统:Chateau, Nathalie,化名:Rudzinski,导演gcv: monmirel, Joëlle,使用名称:Ciocco, ccv主任dsm: Rudzinski, stapine

可以使用

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

参见regex演示。细节:

  • ([^,s][^,]*)-组1:除逗号和空格以外的字符,然后是零个或多个非逗号字符
  • s*:s*—由零个或多个空格包围的冒号
  • (.*?)-组2:除换行符外,任何零或多个字符尽可能少
  • (?=[^,]*:|$)-与紧接在后面的位置匹配的正向前看
    • [^,]*:-零或多个非逗号,然后是:字符
    • |-或
    • $-字符串结束
  • 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)
}

最新更新