2016-07-04 74 views
-4
+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位Python的正则表达式中删除所有字符,除了4个七段

+ NIEM

请帮助。

+0

我使用了're.sub(r'(\ + | \ _)\ d {3} [0-9]',''),我只是在乎数字,所以让我直接访问它们。 ',dot)'但它的删除+/_ XXXX不能代替:( – pejot

+0

这个补充属于帖子,而不是注释 – LogicStuff

+0

我在这个页面上用'3715'使用了CTRL + F,并且只在你的预期输出中找到了这个值。请检查您的输入。 –

回答

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})时,我们有效地对正则表达式引擎说:“给我一个字符串,从行首开始,可能在开头有一个额外的字符,然后有四个字符数字之后立即。 “

相关问题