比如说aaabccc11fdsa
这个字符串,我要把aaa,ccc和11这种会重复两次以上的字符串匹配出来,该怎么办?如果正则表达式做不到的话,有其他什么PHP,Python内置函数可以做到吗?内置函数也没有的话只能手写算法了吗?
比如说aaabccc11fdsa
这个字符串,我要把aaa,ccc和11这种会重复两次以上的字符串匹配出来,该怎么办?如果正则表达式做不到的话,有其他什么PHP,Python内置函数可以做到吗?内置函数也没有的话只能手写算法了吗?
用个简单的正则就可以匹配了,我只会js的。
var s = 'aaabccc11fdsa';
var reg = /(\w)\1+/ig;
console.log(s.match(reg)); //["aaa", "ccc", "11"]
Python代码:
(\w)
匹配字母数字下划线即[a-zA-Z0-9_]((\w)\2)
匹配重复的字符,其中\2
匹配分组number是2的分组,因为最外层有圆括号,所以number是2的分组就是前面\w
匹配的字符((\w)\2+)
匹配重复出现2次或以上的字符
>>> import re
>>> str = 'aaabccc11fdsa'
>>> re.findall(r'((\w)\2+)', str)
[('aaa', 'a'), ('ccc', 'c'), ('11', '1')]
>>> [match[0] for match in re.findall(r'((\w)\2+)', str)]
['aaa', 'ccc', '11']
>>>
参考链接:Python字符串操作相关问题
import re
a = 'aaabccc11fdsa'
b = re.finditer(r'(.)(\1+)', a)
for i in b:
print(i.group())
这样应该可以
<?php
preg_match_all(
'/(\w)\1+/i',
'aaabccc11fdsa',
$matches,
PREG_PATTERN_ORDER
);
print_r($matches[0]);
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
8 回答6.5k 阅读
2 回答4.3k 阅读✓ 已解决
2 回答849 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
JS代码:
其中,正则表达式中
.
表示任意字符,\1
表示第一个被匹配到的分组,+
表示匹配前一个字符一次或一次以上。