2016-12-22 6 views
0

私はパターンにマッチさせようとしているファイルを持っていますが、それを他の文字列に置き換えますが、一致する行は大きすぎて複数行で発生します。私のパターンは最初の行にマッチし、その行だけを置き換えています。Pythonを使って複数行のパターンの正規表現を調べるには

例 -

m_pMainSceneManager->PushScene<ConfigurationSpecificHelpScreens>(MainScreenPriority::HelpScreens, &m_ContextTable 
      , L"HelpScreens.mercury"); 

ここでは2行である - コンテキストテーブル(&m_ContextTableまで )が一列にあり、 , L"HelpScreens.mercury");は別のラインです。非常に多くの正規表現で

また、私はこの正規expressionaを試してみました -

cpat = re.compile(r'.*m_pMainSceneManager->PushScene<ConfigurationSpecificHelpScreens>\(.*\n.*\)') 

を私はre.MULTILINEとし、また、そのことなく、上記の試してみました。しかし、運がない。

+0

re.compile – user2564083

+0

re.compileを(r '。* m_pMainSceneManager-> PushScene \(。* \ n。* \)')これは動作していない式です – user2564083

答えて

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> 

あなたはこれを使用することができます( '。。* m_pMainSceneManager-> PushScene \(* \ N * \)' R)

>>> 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> 
+0

あなたの返答はありがとうございます。しかし、私はre.DOTALLで試しましたが、運はありません。私は正確な正規表現を探しています。助けてください。詳細が必要な場合はお知らせください – user2564083

+1

@ user2564083私は自分の答えを編集しました。 – Daronna

+0

大変ありがとうございます。それは今仕事です。高く評価 !メリークリスマス :) – user2564083

関連する問題