正则表达式(单词:123、345、567 -> word.123、word.345、word.567)

RegEx (word : 123, 345, 567 -> word.123,word.345,word.567)

我很遗憾未能解决这个正则表达式问题,我不希望光明会永远到来。因此,是时候寻求帮助了。 我有一个很长的txt文件,其中重复的一行是这样的:

acteur: 634, 681, 731

我想把它转换成:

Acteur.634,Acteur.681,Acteur.731

当然,我不想更改任何其他台词。只有以单词 acteur: 开头的行应该受到影响。

这是我的文件的片段(纯文本):

inbob: -1
mention: 
Il n'est pas distingué
acteur: 731
lieu: 
editeur: Les étoiles de la chanson
collection: 
numed: 
nbv: 
nbp: 
date: [1934]
date2: 1934
(:remarque:Deuxième vérification faite : ok:)");

type: 
inbob: -1
mention: 
Comme un moineau
acteur: 634, 681, 731
lieu: 
editeur: Les étoiles de la chanson
collection: 
numed: 
nbv: 
nbp: 
date: [1930]
date2: 1930
(:remarque::)");

目标是:

inbob: -1
mention: 
Il n'est pas distingué
Acteur.731
lieu: 
editeur: Les étoiles de la chanson
collection: 
numed: 
nbv: 
nbp: 
date: [1934]
date2: 1934
(:remarque:Deuxième vérification faite : ok:)");

type: 
inbob: -1
mention: 
Comme un moineau
Acteur.634,Acteur.681,Acteur.731
lieu: 
editeur: Les étoiles de la chanson
collection: 
numed: 
nbv: 
nbp: 
date: [1930]
date2: 1930
(:remarque::)");

搜索 ([0-9]+) 并替换为 Acteur. 即可完成工作,但会更改所有文件。我想不知道如何将流程限制在以 acteur: 开头的行,我知道我错过了正确的方法。

谢谢。

如果您是 运行 PHP,下面的正则表达式会对您有所帮助。

^(?!acteur:).*(*SKIP)(*F)|(?:^acteur:\h+|\h+)

preg_replace中使用上面的正则表达式,然后将匹配的字符替换为Acteur.

^(?!acteur:).* 匹配所有以 acteur: 开头的行,后面的 (*SKIP)(*F) 使整个匹配失败。

^acteur:\h+ 从剩余的字符串中,此正则表达式将匹配 acteur: 部分加上后面的一个或多个 space 字符。 |\h+ 其他剩余的一个或多个 space 个字符。请注意,这不会与不以 acteur 开头的行上的 space 匹配,因为我们已经跳过了这些行。

DEMO

$str = <<< EOT
inbob: -1
mention: 
Il n'est pas distingué
acteur: 731
lieu: 
editeur: Les étoiles de la chanson
collection: 
numed: 
nbv: 
nbp: 
date: [1934]
date2: 1934
(:remarque:Deuxième vérification faite : ok:)");

type: 
inbob: -1
mention: 
Comme un moineau
acteur: 634, 681, 731
lieu: 
editeur: Les étoiles de la chanson
collection: 
numed: 
nbv: 
nbp: 
date: [1930]
date2: 1930
(:remarque::)");
EOT;
echo preg_replace('~^(?!acteur:).*(*SKIP)(*F)|(?:^acteur:\h+|\h+)~um', 'Acteur.', $str);