Python正则表达式删除除4位数字之外的所有字符

时间:2016-07-04 17:05:42

标签: python regex

+1511
0716
+4915 CZECHY
+3815/0616 PORT MO,
AO
_3615 USA *, SUV run on flat
+4515 PORT SUV
*, SUV
+3215 USA *, SUV
+4414
+4815 NIEM
_0616 NIEM  * / MO
+2115 NIEM J

我只需要前4位

  

+ 3715 NIEM

请帮忙。

1 个答案:

答案 0 :(得分:0)

您没有很好地描述您的数据,但看起来您有两种类型的行:

  

(一个或零个字符)(四位数)(其他东西)

  

(其他没有四位数的东西)

我建议使用re包。 Here是Python 3中模块的文档,您应该真正阅读这些文档,以便将来能够自己解决这些问题。

我假设您将所有行都放在名为lines的列表(或其他可迭代)中:

import re
regex = re.compile(r'^.?([0-9]{4})')
for line in lines:
    match = regex.match(line)
    if match:
        number = match.group(0)
        # Do stuff with `number`, which is a string.

这假设在四位数字之前只有一个字符,并且您不关心随后出现的任何字符。

如果你只想要任何出现的前四位数字(提前有任意数量的字符),你可以使用regex = re.compile(r'[0-9]{4}')

正则表达式如何工作

第一个正则表达式是^.?([0-9]{4}。我会为你解决这个问题,因为我猜你是对正则表达的新手。

  • ^匹配行的开头
  • .只匹配任何字符
  • ?表示要将上一场比赛设为0或1次
    • 所以.?说“最多给我一个我不认识的角色”
  • ()括号用于分组,它告诉正则表达式引擎“执行匹配,但让我自己专门访问这些内容”
  • []用于指定字符的;引擎将匹配括号内的一个字符
    • [0-9]是数字的字符类:-匹配ASCII排序中的所有内容(我相信)
  • {N}指定完全重复前一次N
    • [0-9]{4}说“给我四位数”

当我们将它们全部放在一起作为^.?([0-9]{4})时,我们正在对正则表达式引擎说:“给我一个从行首开始的字符串,并且可能在开头有一个额外的字符,并且然后紧接着有四位数字。但我真的只关心数字,所以让我直接访问它们。“