我有一个变量包含几个数字。我想找出那些只包含两个或更多重复数字的数字。这是bash的等价物:
#!/usr/bin/env bash
numbers="1123456789\n34312323445\n6564323243\n8975645345"
for i in $(echo -e $numbers); do
echo $i | egrep '0{2,10}|1{2,10}|2{2,10}|3{2,10}|4{2,10}|5{2,10}|6{2,10}|7{2,10}|8{2,10}|9{2,10}'
done
我需要一个与上面bash代码相当的Python。我尝试了以下方法,但效果不理想:
#!/usr/bin/env python3
import re
numbers = [1123456789, 34312323445, 6564323243, 8975645345]
pattern = re.compile('0{2,10}|1{2,10}|2{2,10}|3{2,10}|4{2,10}|5{2,10}|6{2,10}|7{2,10}|8{2,10}|9{2,10}')
for i in numbers:
if pattern.match(str(i)):
print(i)
bash代码段同时匹配1123456789
和34312323445
,但是python代码段只匹配11234567890
,也就是说,只有当重复的数字出现在求偶时,匹配才会发生
输出:
正则表达式模式的工作方式如下:
(\d)
-这是组2。它捕获单个数字\2+
-尝试一次或多次匹配组2中的内容为了方便起见,整个过程被另一组(第1组)包装起来
您还可以使用
re.findall
查找任何数字中的所有重复数字,而不仅仅是任何给定数字中的第一个匹配:输出:
在python中,可以执行以下操作:
正则表达式详细信息:
([0-9])
:匹配一个数字并在组#1中捕获它\1
:返回对组#1的引用,以确保我们有一个数字的重复顺便说一句,您的
bash
代码也可以使用相同的捕获组和反向引用概念进行重构和简化:对于
pattern
,请尝试以下操作:(假设你不想把重复次数限制在10次,而只设为2次或更多)
相关问题 更多 >
编程相关推荐