您还没有描述你的数据非常好,但它看起来你有两种类型的行:
(一个或零个字符)(四位数)(其他的东西)
或
(不带有设置的四位数的其他东西)
我建议使用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})
时,我们有效地对正则表达式引擎说:“给我一个字符串,从行首开始,可能在开头有一个额外的字符,然后有四个字符数字之后立即。 “
我使用了're.sub(r'(\ + | \ _)\ d {3} [0-9]',''),我只是在乎数字,所以让我直接访问它们。 ',dot)'但它的删除+/_ XXXX不能代替:( – pejot
这个补充属于帖子,而不是注释 – LogicStuff
我在这个页面上用'3715'使用了CTRL + F,并且只在你的预期输出中找到了这个值。请检查您的输入。 –