我对使用反向引用的正则表达式有疑问。
我需要匹配字符串,我尝试使用此正则表达式(\w)\1{1,}
来捕获字符串的重复值,但此正则表达式仅捕获连续重复的字符串;我坚持要改进我的正则表达式以捕获所有重复的值,如下所示:
import re
str = 'capitals'
re.search(r'(\w)\1{1,}', str)
Output None
import re
str = 'butterfly'
re.search(r'(\w)\1{1,}', str)
<_sre.SRE_Match object; span=(2, 4), match='tt'>
答案 0 :(得分:2)
我会使用r'(\w).*\1
,因此即使中间有特殊字符或空格,它也允许任何重复的字符。
然而,这对于重复字符重叠字符串abcdabcd
等组的内容的字符串不起作用,其中它只识别第一组,忽略第一组中包含的其他重复字符(b,c, d)
查看演示:https://regex101.com/r/m5UfAe/1
所以另一种选择(根据你的需要)是对分析的字符串进行排序:
import re
str = 'abcdabcde'
re.findall(r'(\w).*\1', ''.join(sorted(str)))
使用重复的字符['a','b','c','d']
答案 1 :(得分:0)
希望下面的代码将帮助您了解Python RegEx的Backreference概念
在给定的字符串str
中有两组信息可用
员工基本信息:
员工指定
import re
#sample input
str="""
@daniel dxc chennai 45000 male daniel @henry infosys bengaluru 29000 male hobby-
swimming henry
@raja zoho chennai 37000 male raja @ramu infosys bengaluru 99000 male hobby-badminton
ramu
%daniel python developer daniel% %henry database admin henry%
%raja Testing lead raja% %ramu Manager ramu%
"""
#backreferencing employee name (\w+) <---- \1
#----------------------------------------------
basic_info=re.findall(r'@+(\w+)(.*?)\1',str)
print(basic_info)
#(%) <-- \1 and (\w+) <--- \2
#-------------------------------
designation=re.findall(r'(%)+(\w+)(.*?)\2\1',str)
print(designation)
for i in range(len(designation)):
designation[i]=(designation[i][1],designation[i][2])
print(designation)