首页 > 解决方案 > 在带有反向引用的多行字符串中匹配python中的正则表达式的问题

问题描述

我正在尝试匹配以下正则表达式:

((symbol_live:)\s+\"(?P<LiveSymbol>.)\")?((symbol_dead:)\s+\"(?P<DeadSymbol>.)\")?(gamefield:\s*\n\"\n(?P<Seed>(((\g<DeadSymbol>)|(\g<LiveSymbol>))+\n)+)\"\s*)?

要搜索的给定字符串是:

gamefield:
"
-------------------------------
-------------------------------
----------oo-------------------
----------oo-------------------
------------oo-----------------
------------oo-----------------
-------------------------o-----
-------------------------o-----
-------------------------o-----
-------------------------------
-------------------------------
-------------------------------
-------------------------------
"
symbol_dead: "-"
symbol_live: "o"

我正在使用 python RE 模块编写此代码,并使用 finditer 遍历所有可能的匹配项。它同时返回symbol_dead: "-"symbol_live: "o"但不返回"seed"命名组gamefield

我编写以下代码来返回迭代中每个组的值:

p = re.finditer(r'((symbol_live:)\s+\"(?P<LiveSymbol>.)\")?((symbol_dead:)\s+\"(?P<DeadSymbol>.)\")?(gamefield:\s*\n\"\n(?P<Seed>(((\\g<DeadSymbol>)|(\\g<LiveSymbol>))+\n)+)\"\s*)?', string=input, flags=re.M)
for l in p:
    if 'DeadSymbol' in l.groupdict().keys() and l.groupdict()['DeadSymbol'] != None:
        print('DeadSymbol return = ' + l.groupdict()['DeadSymbol'])
    elif 'LiveSymbol' in l.groupdict().keys() and l.groupdict()['LiveSymbol'] != None:
        print('LiveSymbol return = ' + l.groupdict()['LiveSymbol'])
    elif 'Seed' in l.groupdict().keys() and l.groupdict()['Seed'] != None:
        print('Seed return = ' + l.groupdict()['Seed'])

当我检查它时,https://regexr.com/它起作用了!但不适用于https://pythex.org/ 我不知道正则表达式有什么问题,我需要帮助!因为解决问题让我感到沮丧!

标签: pythonregex

解决方案


推荐阅读