我很遗憾没能解决这个正则表达式的问题,我不希望光会永远存在。因此,现在是时候寻求帮助了。 我有一个很长的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.$1
可以完成工作,但会更改所有文件。我想不知道如何将进程限制为以acteur:
开头的行,我知道我错过了正确的方法。
谢谢。
答案 0 :(得分:0)
如果您正在运行PHP,则以下正则表达式可以帮助您。
^(?!acteur:).*(*SKIP)(*F)|(?:^acteur:\h+|\h+)
在preg_replace
中使用上述正则表达式,然后将匹配的字符替换为Acteur.
^(?!acteur:).*
匹配以acteur:
开头的所有行,而后面的(*SKIP)(*F)
会使整个匹配失败。
^acteur:\h+
从剩下的字符串中,此正则表达式将匹配部分acteur:
以及以下一个或多个空格字符。 |
或,\h+
其他剩余的一个或多个空格字符。请注意,这与不以acteur
开头的行上的空格不匹配,因为我们已经跳过了这些行。
$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);