【发布时间】:2015-07-12 01:54:11
【问题描述】:
我的模式中有两个命名组:myFlag 和 id,我想在组 之前再添加一个 myFlag id。
这是我当前的代码:
# i'm using Python 3.4.2
import re
import os
contents = b'''
xdlg::xdlg(x_app* pApp, CWnd* pParent)
: customized_dlg((UINT)0, pParent, pApp)
, m_pReaderApp(pApp)
, m_info(pApp)
{
}
'''
pattern = rb'(?P<myFlag>[a-zA-Z0-9_]+)::(?P=myFlag).+:.+(?P<id>\(UINT\)0 *,)'
res = re.search(pattern, contents, re.DOTALL)
if None != res:
print(res.groups()) # the output is (b'xdlg', b'(UINT)0,')
# 'replPattern' becomes b'(?P<myFlag>[a-zA-Z0-9_]+)::(?P=myFlag).+:.+((?P=myFlag)\\(UINT\\)0 *,)'
replPattern = pattern.replace(b'?P<id>', b'(?P=myFlag)', re.DOTALL)
print(replPattern)
contents = re.sub(pattern, replPattern, contents)
print(contents)
预期的结果应该是:
xdlg::xdlg(x_app* pApp, CWnd* pParent)
: customized_dlg(xdlg(UINT)0, pParent, pApp)
, m_pReaderApp(pApp)
, m_info(pApp)
{
}
但现在结果和原来的一样:
xdlg::xdlg(x_app* pApp, CWnd* pParent)
: customized_dlg((UINT)0, pParent, pApp)
, m_pReaderApp(pApp)
, m_info(pApp)
{
}
【问题讨论】:
-
为什么要用
(?P=myFlag)(带括号)替换?P<id>(无括号)? -
此外,输入中没有第三个
xdlg字符串。您到底想在这里实现什么目标? -
因为我想用'myFlag'组替换字符串,所以必须用括号括起来(python语法)
-
这里的预期输出是什么?你想解决什么问题?
-
您用反向引用替换了命名组的名称,正则表达式语法在这里没有意义。