python - 在带有反向引用的多行字符串中匹配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/
我不知道正则表达式有什么问题,我需要帮助!因为解决问题让我感到沮丧!
解决方案
推荐阅读
- react-native - RN 从 webview 导航到屏幕
- c - 如何解决这个错误,为什么我会得到它?
- java - 如何在单词的开头只创建大写字母?
- javascript - 如何在纯 JavaScript 中使用 create-react-app 包?
- swift - swipeGesture 是否会阻止 touchesBegan() 的执行?
- dask - 如何在 dask 并行化中使用广播变量
- codenameone - 循环参考:com.codename1.ui.Display$EdtException
- calculation - 如何在 cognos 11.1 上计算 YoY?
- ios - 如何使用谓词从 HealthKit iOS 过滤“活动”心率?
- r - 我如何使用 lapply 和两个参数?