我有一个文件,我试图匹配一个模式,并用其他字符串替换它,但匹配的行太大,发生在多行;因此我的模式匹配第一行并仅替换该行。
示例 -
m_pMainSceneManager->PushScene<ConfigurationSpecificHelpScreens>(MainScreenPriority::HelpScreens, &m_ContextTable
, L"HelpScreens.mercury");
这是两行 -
直到上下文表(&m_ContextTable
)在一行中
, L"HelpScreens.mercury");
在另一行。
有这么多正则表达式我也试过这个正则表达式 -
cpat = re.compile(r'.*m_pMainSceneManager->PushScene<ConfigurationSpecificHelpScreens>\(.*\n.*\)')
我上面用re.MULTILINE
尝试了,但没有。{但没有运气。
答案 0 :(得分:1)
您可能应该使用flags=re.DOTALL
。在此处详细了解re.compile
:https://docs.python.org/2/library/re.html。 re.DOTALL
表示搜索包含换行符。
>>> import re
>>> print(re.match('.', '\n'))
None
>>> print(re.match('.', '\n', flags=re.DOTALL))
<_sre.SRE_Match object at 0x02B848E0>
在您的特定情况下,您可以使用此:
>>> s = '''m_pMainSceneManager->PushScene<ConfigurationSpecificHelpScreens>(MainScreenPriority::HelpScreens, &m_ContextTable
... , L"HelpScreens.mercury");'''
>>> s
'm_pMainSceneManager->PushScene<ConfigurationSpecificHelpScreens>(MainScreenPriority::HelpScreens, &m_ContextTable\n , L"HelpScreens.mercury");'
>>> pattern = re.compile(r'm_pMainSceneManager->PushScene<ConfigurationSpecificHelpScreens>\(.*?\)', flags=re.DOTALL)
>>> pattern.match(s)
<_sre.SRE_Match object at 0x02DE2AA0>