正则表达式(单词: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 匹配,因为我们已经跳过了这些行。
$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);
我很遗憾未能解决这个正则表达式问题,我不希望光明会永远到来。因此,是时候寻求帮助了。 我有一个很长的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 匹配,因为我们已经跳过了这些行。
$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);