+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
请帮忙。
答案 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})
时,我们正在对正则表达式引擎说:“给我一个从行首开始的字符串,并且可能在开头有一个额外的字符,并且然后紧接着有四位数字。但我真的只关心数字,所以让我直接访问它们。“