使用具有反向引用匹配的 python 正则表达式

Using python regex with backreference matches

我对带反向引用的正则表达式有疑问。

我需要匹配字符串,我尝试使用这个正则表达式 (\w){1,} 来捕获我的字符串的重复值,但是这个正则表达式只捕获连续的重复字符串;我一直在改进我的正则表达式以捕获所有重复的值,下面是一些示例:

import re

str = 'capitals'

re.search(r'(\w){1,}', str)

Output None

import re

str = 'butterfly'

re.search(r'(\w){1,}', str)

<_sre.SRE_Match object; span=(2, 4), match='tt'>

我会使用 r'(\w).*,这样即使中间有特殊字符或空格,它也允许任何重复字符。

然而,这对于重复字符与组内容重叠的字符串不起作用,例如字符串 abcdabcd,其中它仅识别第一组,而忽略第一组中包含的其他重复字符 (b, c,d)

查看演示:https://regex101.com/r/m5UfAe/1

因此,另一种方法(取决于您的需要)是对分析的字符串进行排序:

import re
str = 'abcdabcde'
re.findall(r'(\w).*', ''.join(sorted(str)))

返回包含重复字符的数组['a','b','c','d']

希望下面的代码能帮助您理解 Python RegEx

的反向引用概念

给定的字符串中有两组信息可用str

  1. 员工基本信息:

    • 以@employeename 开头,以 employeename 结尾
    • 例如:@daniel dxc 钦奈 45000 男性丹尼尔
  2. 员工指定

    • 以 %employeename 开头然后指​​定并以 employeename% 结束
    • 例如:%daniel python 开发者 daniel%
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+)  <----  
#----------------------------------------------
basic_info=re.findall(r'@+(\w+)(.*?)',str)
print(basic_info)

#(%) <--   and (\w+) <---  
#-------------------------------
designation=re.findall(r'(%)+(\w+)(.*?)',str)
print(designation)

for i in range(len(designation)):
    designation[i]=(designation[i][1],designation[i][2])
print(designation)