如何替换匹配正则表达式模式的字符串?

时间:2017-06-05 15:38:30

标签: python string python-3.x list

我有数字列表。我想用连续数字提取所有数字,如444,888,1111等。我的以下python代码与正则表达式完全按照我想要的方式工作。

import re 
numbers = ['44444', '123', '444', '454', '76587', '888', '9090', '1111', '321', '4321', '4563', '3333', '543', '765', '4567', '555', '99999', '11211','11']
conList = [] 

for num in numbers:
  if re.search(r'^(\d)\1+$',num):
    conList.append(num)

print('conList :',conList) 

结果:

conList : ['44444', '444', '888', '1111', '3333', '555', '99999', '11']

现在我试图在不使用正则表达式模式的情况下获得相同的结果。如何用一些python代码替换正则表达式模式? (我这样做只是为了教育目的。如果我有一个,我会发布我的答案。)

3 个答案:

答案 0 :(得分:2)

  

这是我尝试解决这个问题。

for num in numbers:
  if len(set(num)) == 1 and len(num) >1:
    conList.append(num)
print('conList :',conList)

或者,使用列表理解

conList = [ num for num in numbers if len(num) > 1 and len(set(num)) == 1 ]
print('conList : %s', conList)

或者,使用过滤器

conList = filter(lambda x: len(x) > 1 and len(set(x)) == 1, numbers)

答案 1 :(得分:0)

使用pythonic和fast方法列表理解:

[i for i in numbers if len(set(i)) == 1]

答案 2 :(得分:0)

您可以使用列表推导在一行中执行以下操作:

numbers = ['44444', '123', '444', '454', '76587', '888', '9090', '1111', '321', '4321', '4563', '3333', '543', '765', '4567',
     '555', '99999', '11211', '11']
conList = [x for x in numbers if x.count(x[0]) == len(x)]
print conList

输出:

['44444', '444', '888', '1111', '3333', '555', '99999', '11']