so。我有一个字符串,需要将"
包围的每个;
替换为,
(例如,;
在"CANDIES,CHOC,DK,NFS (45-59% CACAO SOL 90%**!!!;!!!** 60-69% CACAO SOL"
中(
代码
import re
a = '19905;"CANDIES,CHOC,DK,NFS (45-59% CACAO SOL 90%; 60-69% CACAO SOL";1;550;5,09;32,2;1,74;59,97;7,2;46,14;57;8,13;152;214;568;23;2,11;1,076;1,44;3,5;0;0,026;0,051;0,747;0,304;0,041;0;0;0;0;27,6;0,23;49;2;0;7;25;1;0;31;0,55;0;0;8;18,993;9,801;1,107;7;28,35;1 oz;127;1 bar;0'
print(re.sub('"[^"]*(;)[^"]*"', ',', a))
唯一的问题是它输出
19905;,;1;550;5,09;32,2;1,74;59,97;7,2;46,14;57;8,13;152;214;568;23;2,11;1,076;1,44;3,5;0;0,026;0,051;0,747;0,304;0,041;0;0;0;0;27,6;0,23;49;2;0;7;25;1;0;31;0,55;0;0;8;18,993;9,801;1,107;7;28,35;1 oz;127;1 bar;0
而不是
19905;"CANDIES,CHOC,DK,NFS (45-59% CACAO SOL 90%, 60-69% CACAO SOL";1;550;5,09;32,2;1,74;59,97;7,2;46,14;57;8,13;152;214;568;23;2,11;1,076;1,44;3,5;0;0,026;0,051;0,747;0,304;0,041;0;0;0;0;27,6;0,23;49;2;0;7;25;1;0;31;0,55;0;0;8;18,993;9,801;1,107;7;28,35;1 oz;127;1 bar;0
某种程度上取代整个匹配的部分
"CANDIES,CHOC,DK,NFS (45-59% CACAO SOL 90%, 60-69% CACAO SOL" --> ,
如果您只有一个;
即可替换"..."
内部,则可以使用
import re
a = '19905;"CANDIES,CHOC,DK,NFS (45-59% CACAO SOL 90%; 60-69% CACAO SOL";1;550;5,09;32,2;1,74;59,97;7,2;46,14;57;8,13;152;214;568;23;2,11;1,076;1,44;3,5;0;0,026;0,051;0,747;0,304;0,041;0;0;0;0;27,6;0,23;49;2;0;7;25;1;0;31;0,55;0;0;8;18,993;9,801;1,107;7;28,35;1 oz;127;1 bar;0'
print(re.sub('("[^"]*);([^"]*")', r'1,2', a))
# => 19905;"CANDIES,CHOC,DK,NFS (45-59% CACAO SOL 90%, 60-69% CACAO SOL";1;550;5,09;32,2;1,74;59,97;7,2;46,14;57;8,13;152;214;568;23;2,11;1,076;1,44;3,5;0;0,026;0,051;0,747;0,304;0,041;0;0;0;0;27,6;0,23;49;2;0;7;25;1;0;31;0,55;0;0;8;18,993;9,801;1,107;7;28,35;1 oz;127;1 bar;0
将(...)
放置在您需要保留的零件周围,然后在替换中使用占位符1
和2
。
请参阅此Python演示。
其他,使用
import re
a = '19905;"CANDIES,CHOC,DK,NFS (45-59% CACAO SOL 90%; 60-69% CACAO SOL";1;550;5,09;32,2;1,74;59,97;7,2;46,14;57;8,13;152;214;568;23;2,11;1,076;1,44;3,5;0;0,026;0,051;0,747;0,304;0,041;0;0;0;0;27,6;0,23;49;2;0;7;25;1;0;31;0,55;0;0;8;18,993;9,801;1,107;7;28,35;1 oz;127;1 bar;0'
print(re.sub('"[^"]*"', lambda x: x.group().replace(';', ','), a))
用逗号替换双引号子字样内的所有;
。请参阅另一个python演示。
您可以尝试一下,
import regex as re
print(re.sub(r'(?<="[^"]*);(?=[^"]*")',',',a))
我还可以说,您的正则 "[^"]*(;)[^"]*"
在双引号中匹配所有字符串,并用" ,
"代替,因此产生了这样的输出。