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

2024-09-22 20:21:13 发布

您现在位置:Python中文网/ 问答频道 /正文

+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

请帮忙。你知道吗


Tags: runonport数字moflatusaao
1条回答
网友
1楼 · 发布于 2024-09-22 20:21:13

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

(one or zero characters)(four digits)(other stuff)

或者

(other stuff with no set of four digits)

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

我假设您的所有行都在一个名为lines的列表(或其他iterable)中:

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}。我来给你解释一下,因为我猜你对regex还不熟悉。你知道吗

  • ^匹配行的开头
  • .只匹配一次任何字符
  • ?表示使上一个匹配0或1次
    • 所以.?说“最多给我一个我不认识的字符”
  • ()圆括号用于分组,它告诉regex引擎“进行匹配,但让我自己访问这些内容”
  • []用于指定字符的;引擎将匹配括号内的一个字符
    • [0-9]是数字的字符类:-匹配ASCII排序中包含的所有内容(我相信)
  • {N}指定将前一件事精确地重复N
    • [0-9]{4}说“给我四位数”

当我们把它放在一起作为^.?([0-9]{4})时,我们实际上是在对regex引擎说:“给我一个从行首开始的字符串,可能在行首有一个额外的字符,然后紧接着有四个数字。不过,我真的只关心数字,所以让我直接访问这些数字。”

相关问题 更多 >