Python-快速的reg exp替换分隔文件中的重复空格

时间:2019-01-18 16:50:17

标签: python regex

我有一个用^ F个字符分隔的文本文件,我想删除定界符之间的多余空白。我也想删除前面的附加零。我的文件看起来像这样,

File1.txt

implementation 'com.google.android.gms:play-services-ads:12.0.0'

预期输出:

12345^F0007564  ^F       ^F03^F           ^F01-18-2019 03:12:00  ^FAbcder   ^F

带有200k条记录的文件大小约为100mb。任何快速的方法来替换它,并使用python 2.6.6传递给数据模型?

3 个答案:

答案 0 :(得分:2)

您可以在re.sub中使用此正则表达式:

>>> text = '12345^F0007564  ^F       ^F03^F           ^F01-18-2019 03:12:00  ^FAbcder   ^F'
>>> print re.sub(r' {2,}|(?<=F)0+(?!\d+-)', '', text)
12345^F7564^F^F3^F^F01-18-2019 03:12:00^FAbcder^F

RegEx Demo

RegEx详细信息:

  • {2,}:匹配2个以上空格
  • |:或
  • (?<=F)0+(?!\d+-):匹配前面有F且后面不跟1+数字和连字符的1+个零(以避免与日期中的零匹配)

答案 1 :(得分:1)

这在某些日期解决了前导0:

input = "12345^F0007564  ^F       ^F03^F           ^F01-18-2019 03:12:00  ^FAbcder   ^F"
print(re.sub(r"(\^F)(0*(?!\d-))", '^F', input.replace(" ", "")))

输出:

12345^F7564^F^F3^F^F01-18-201903:12:00^FAbcder^F

编辑:

以上内容删除了日期中的空格。另一个答案是通过仅删除双精度空格或更多空格来解决此问题,但是假设您要删除除日期格式中的空格以外的所有空格,我实际上会将其分成两个re.sub

input = "12345^F0007564  ^F       ^F03^F           ^F01-18-2019 03:12:00  ^FAbcder   ^F"
input = re.sub(r'(\^F)( )|( )\^F', '', input)
print(re.sub(r"(\^F)(0*(?!\d-))", '^F', input))

第一个re.sub会删除^F之前或之后的所有空格字符。显然,这比使用单个表达式的效率低,但是您的数据集并不大,应该引起关注。

答案 2 :(得分:0)

100mb小。您可以使用任何所需的随机正则表达式来做到这一点。

import re

text = '12345^F0007564  ^F       ^F03^F           ^F01-18-2019 03:12:00  ^FAbcder   ^F'
print(re.sub(r'\s*\^F(((?!\d\d-)0*\s*)|\s*)', r'^F', text))

这里是工作中的Picture of the expected result

输出正确:12345^F7564^F^F3^F^F01-18-2019 03:12:00^FAbcder^F

日期现在保持不变。