+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
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.
您没有很好地描述您的数据,但看起来您有两种类型的行:
或者
我建议使用
re
包。Here是python3中模块的文档,您应该阅读这些文档,以便将来能够自己解决这些问题。你知道吗我假设您的所有行都在一个名为
lines
的列表(或其他iterable)中:这假设在四位数之前只有一个字符,并且您不关心后面的内容。你知道吗
如果您只是想要出现的任何前四位数字(预先有任意数量的字符),您可以使用
regex = re.compile(r'[0-9]{4}')
。你知道吗正则表达式的工作原理
第一个正则表达式是
^.?([0-9]{4}
。我来给你解释一下,因为我猜你对regex还不熟悉。你知道吗^
匹配行的开头.
只匹配一次任何字符?
表示使上一个匹配0或1次.?
说“最多给我一个我不认识的字符”()
圆括号用于分组,它告诉regex引擎“进行匹配,但让我自己访问这些内容”[]
用于指定字符的类;引擎将匹配括号内的一个字符[0-9]
是数字的字符类:-
匹配ASCII排序中包含的所有内容(我相信){N}
指定将前一件事精确地重复N
次[0-9]{4}
说“给我四位数”当我们把它放在一起作为
^.?([0-9]{4})
时,我们实际上是在对regex引擎说:“给我一个从行首开始的字符串,可能在行首有一个额外的字符,然后紧接着有四个数字。不过,我真的只关心数字,所以让我直接访问这些数字。”相关问题 更多 >
编程相关推荐