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'