正则表达式数组python

2024-10-01 19:20:02 发布

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

我知道有很多关于regex的信息,但我不知怎么搞不懂

我有一个array1 = ['\n 1.979 \n, \n 1.799 \n']看起来像这样,但数字不同,但总是以这种格式,所以regex = re.compile(r'\d.\d\d\d')在记事本++中非常匹配,但在python中似乎不起作用

import re 
regex = re.compile(r'\d.\d\d\d')
filteredarray= [i for i in array1 if regex.match(i)]

print(filteredarray)

我错过了什么? 提前谢谢


Tags: inimportre信息forif格式match
2条回答

我认为你的模式\d.\d\d\d不是在\n 1.979 \n, \n 1.799 \nstart处。您只需将\d.\d\d\d替换为^[\s\S]+\d.\d\d\d

详细信息

  • ^:字符串的开头
  • [\s\S]+:匹配任何字符,包括换行符

我还尝试了python上的测试结果

import re
array1 = ['\n 1.979   \n, \n 1.799   \n']
regex = re.compile(r'^[\s\S]+\d.\d\d\d')

filteredarray= [i for i in array1 if regex.match(i)]

print(filteredarray)

结果

['\n 1.979   \n, \n 1.799   \n']

您可以使用re.findall(expression, string)查找所需的值并将其转换为列表

您的需求的正确正则表达式是\d\.?\d{3},或者您也可以使用\d\.\d\d\d

import re

array1 = ['\n 1.979   \n, \n 1.799   \n']

filteredarray = []
for i in array1:
    filteredarray.extend(re.findall('\d\.?\d{3}', i))

print(filteredarray)

相关问题 更多 >

    热门问题