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

2022-09-28 21:24:02 发布

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

我有一张有数字的单子。我想提取所有连续数字,如4448881111等。。我下面用regex编写的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']

现在,我正在尝试在不使用regex模式的情况下实现相同的结果。如何用一些python代码替换regex模式?(我试这个只是为了教育目的。如果我有答案,我会把答案贴出来。)


Tags: 答案代码inimportreforif方式模式数字numregex单子numbersconlist
3条回答
网友
1楼 ·

您可以在一行中使用列表理解来执行此操作,如下所示:

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']
网友
2楼 ·

使用快速的列表理解方法:

[i for i in numbers if len(set(i)) == 1]
网友
3楼 ·

This is my attempt to solve this problem.

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)

热门问题