Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式删除除4个数字以外的所有字符_Python_Regex - Fatal编程技术网

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

Python正则表达式删除除4个数字以外的所有字符,python,regex,Python,Regex,我只需要得到前4位数字 +3715NIEM 请帮助。您没有很好地描述您的数据,但看起来您有两种类型的行: (一个或零个字符)(四位数)(其他内容) 或 (其他不含四位数的内容) 我建议使用re包。是Python3中模块的文档,您应该阅读这些文档,以便将来能够自己解决这些问题 我假设您的所有行都位于名为行的列表(或其他iterable)中: +1511 0716 +4915 CZECHY +3815/0616 PORT MO, AO _3615 USA *, SUV run on flat +45

我只需要得到前4位数字

+3715NIEM


请帮助。

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

(一个或零个字符)(四位数)(其他内容)

(其他不含四位数的内容)

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

我假设您的所有行都位于名为
行的列表(或其他iterable)中:

+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
这假设在四位数之前只有一个字符,并且您不关心后面的内容

如果您只是想要显示任何前四位数字(预先有任意数量的字符),可以使用
regex=re.compile(r'[0-9]{4}')


正则表达式如何工作

第一个正则表达式是
^.?([0-9]{4}
。我将为您详细介绍一下,因为我猜您对正则表达式是新手

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

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

我使用了
re.sub(r'(\+\124; \\ ud{3}[0-9],'',dot)
但是它的删除+/\uxxxx没有替换:(这个补充属于帖子,不是评论。我在这个页面上使用了CTRL+F和
3715
,并且只在预期的输出中找到了这个值。请检查您的输入。
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.