Python正则表达式以特殊格式字符串命名的组
目标:Python正则表达式以特殊格式字符串命名的组,python,regex,regex-group,Python,Regex,Regex Group,目标: 我有一个输入字符串,其中由逗号和键值分隔 我想用名称组编写正则表达式,以便提取和替换每个属性的值 在字符串*关键字中,property1=ABC,property2=2我想按名称查找并替换property1和property2的值 对于给定的字符串*关键字,property1=ABC,property2=2,结果字符串应该是*关键字,property1=DEF,property2=10 请参阅下面的代码 重新导入 #在给定字符串中查找property1并替换其新值 属性1='DEF' #
*关键字中,property1=ABC,property2=2
我想按名称查找并替换property1
和property2
的值
对于给定的字符串*关键字,property1=ABC,property2=2
,结果字符串应该是*关键字,property1=DEF,property2=10
请参阅下面的代码
重新导入
#在给定字符串中查找property1并替换其新值
属性1='DEF'
#在给定字符串中查找property2并替换其新值
属性2='10'
第1行='*关键字,property1=ABC,property2=2'
第2行='*关键字,property2=2,property1=ABC'#property2位于ProeProperty1之前
第3行='*关键字,property1=ABC,property2=2'#与第1行相同,但没有空格
名为的正则表达式组=r'=\s*(.*)\s*,\s*属性1=\s*(.*)\s*,'
line1\u found=re.search(带有指定组的正则表达式,第1行)
line2_found=re.search(带有命名组的正则表达式,第2行)
line3_found=re.search(带有命名组的正则表达式,第3行)
如果找到line1_:
打印(line1_-found.group('property1')、line1_-found.group('property2'))
如果找到line2_:
打印(第2行找到的.group('property1')、第2行找到的.group('property2'))
如果找到第3行(u):
打印(第3行找到的.group('property1')、第3行找到的.group('property2'))
为了实现您的目标,我建议您考虑使用该功能
重新导入
line0='*关键字,水果=苹果,果汁=芒果'
第1行='*关键字,property1=ABC,property2=2'
第2行='*关键字,property2=2,property1=ABC'#property2位于ProeProperty1之前
第3行='*关键字,property1=ABC,property2=2'#与第1行相同,但没有空格
带有命名为的正则表达式组=re.compile(r'(?P\w+(?P\s*=\s*)(?P\w+))
repl={'fruit':'avocado','property1':170}
对于[第0行、第1行、第2行、第3行]中的l:
s=regex_,其中_命名为_group.sub(lambda m:m.group('prop')+m.group('map'))+
(str(repl[m.group('prop')))
如果m.group('prop')在repl中
else m.group('val')),l)
印刷品
结果:
*关键词,水果=鳄梨,果汁=芒果
*关键字,property1=170,property2=2
*关键字,property2=2,property1=170
*关键字,property1=170,property2=2
.您想要什么输出格式我想用any替换
property1
的值,即ABC
,例如,通过使用命名组获取它,除非我缺少一些东西,否则您的正则表达式似乎没有可以使用此构造创建的命名捕获组:(?p…)
@SitiSchu yes,我不熟悉命名组语法,需要这里的建议ThankX,非常有用,但为了示例,我简化并编写了proeprty1和proeprty2。它们实际上可以是任何类似于*关键字、水果=苹果、果汁=芒果的东西。我想要什么!!!顺便问一下,我如何在字符串中重新装入新值?例如,找到水果的价值并对其进行更改我重新编写了一点代码,使其符合您的要求。但我仍然不明白如何处理“*关键字”部分。如何替换每个属性的值?这很简单,就像d['fruit']='avocado'
。