使用具有反向引用匹配的 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
员工基本信息:
- 以@employeename 开头,以 employeename 结尾
- 例如:@daniel dxc 钦奈 45000 男性丹尼尔
员工指定
- 以 %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)
我对带反向引用的正则表达式有疑问。
我需要匹配字符串,我尝试使用这个正则表达式 (\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
员工基本信息:
- 以@employeename 开头,以 employeename 结尾
- 例如:@daniel dxc 钦奈 45000 男性丹尼尔
员工指定
- 以 %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)