【发布时间】:2021-12-04 00:53:47
【问题描述】:
我有一个 .CSV,我正在一个大文件编辑器 (BssEditor) 中处理它:
DOC;NAME;A_TYPE;ADDRESS;NUMBER;COMPLEMENT;NEIGHBORHOOD;CITY;STATE;ZIPCODE
7971530;Obi Wan Kenobi;R;OF THE PITANGUEIRAS;0000731;;MATATU;DUBAI;BA;40255436
7971541;Anakim Skywalker;AV;VISCONDE OF JEQUITINHONHA;0000243;AP 601;GOOD VOYAGE;RECIFE;PE;51021190
7971974;Jabba the Hutt;;DOS ILHEUS;0000118;APT 600;CENTER;FLOWERPOLIS;SC;88010560
7972512;Mando;;JUNDIACANGA;0000037;HOUSE;IPAVA CITY;SAINT PAUL;SP;04950150
列分隔符是 ;,我想匹配 NUMBER 列开头的所有零以替换为空。
例如:0000731→731
使用^((.*?;){4})0+ 匹配所有内容并替换为$1 很容易,但使用环视则不然...
我试过这样的正则表达式
/^(?<=.*?;){4}0+/
/(?<=^.*?;.*?;.*?;.*?;)0+/
但看起来贪心通配符只适用于前瞻,而不是后瞻。
有办法吗?
并且有办法,在处理数百万条目时是否存在性能问题?
【问题讨论】:
-
您使用什么语言?有些支持可变长度的lookbehinds,有些则不支持。某些语言不支持任何外观。此外,尚不清楚此处是否适合使用正则表达式。您可能希望使用 CSV 方法来提取字段值。某些语言可以在 CSV 方法中执行您想要的操作。您还可以将
'0000731'转换为整数 (731),然后将整数转换回字符串 ('731')。 -
正如我所说的 .csv,我认为应该理解我正在使用一个大文件编辑器... BssEditor 使用带有 MS 正则表达式处理风格的解释。但我在 Notepad++ 上测试它
-
第五行有 5 个零,您希望它保持原样吗?或者让它改成
037