2011-06-15 26 views
2

以下の複数行の文字列からAuth=の値を取得したいと思います。私はPython re.matchを試してみましたが、成功しませんでした。私は助けを得ることができれば感謝しますか?Python Reモジュールを使用して複数行からテキストを抽出する

SID = DQAAALsAAABCeyCMlOaYMHkv55TUQFxA71fxE1LpgpmL1G_o8YennFwBhar2I_LNmJjGjvLHVQy8tSRfYdLnUIHhKyD0FTZBzXyG_s8U4Pt97n9hPz68ZFSM42Qv6Qxuk74TQygHJXhjLWXNuD5mMsh8_MAs-nmhSToNFIyWoP-uTZ_LN2yQS1o9MB43fzuIIxp-1euXGxMceVVrjyidrYeEB13HS5kMHH-HGjiZhoIJBmu5es7pLPj9Ie8NJZ1K3kFhdVEJa4sLSID = DQAAAL4AAACypRIVyVXcs5zYIeUEt9v-wEwPKgQ8Oe23_URsDeHCg-rR2qQK4dTxPV1J6BPTO-6Zly2H9t4sVhm0vHe8IT6sKLdX2IQ8PgGMtSHQNkpQ8zEan0CyFyUetbSW4af6mlk2pksDpvXNm5GtNTj5eTwkCQUmgGep42u5iuCGFy-o9a1cQWz45NO_J8zIYnBdOqlheNTqaMWpi4hpr-_u8Muzs4RjlEbkuYfDu7MrdsJAFwxf0BVW2cGBtB-K2jwaK7wAuth = 873hdyjsbcvuei73hckwoxnaodbc8dnskc8HU1mKRqxh6yEU-9tqx148GqC7h90_190ZzxpEZOHAH5HTptliylRXvMPyqPyijMNu21bOA6ZhvZFuL8YNB3KF63YuV0n5TFJd1-rMI2LQIdPMVBnsxnEGrLIeFOugAFCZ_3OelAc4XjeKdDvIowxkNnvaooXT4kxtkQWzieA3JRKy3Y-Lbi7E0qiXC99GtHVDh5VWvdTs2LCv3wnRULtLp6ZCoToZ8qoUWMzU9PZldsKSn E

+2

あなたのコードが動作していないことを示してください – stema

+1

're.search'を試してください。 'match'は文字列の先頭にのみマッチします。 http://docs.python.org/library/re.html#search-vs-match –

答えて

2
import re 

text = "SID=DQAAALsAAABCeyCMlOaYMHkv55TUQFxA71fxE1LpgpmL1G_o8YennFwBhar2I_LNmJjGjvLHVQy8tSRfYdLnUIHhKyD0FTZBzXyG_s8U4Pt97n9hPz68ZFSM42Qv6Qxuk74TQygHJXhjLWXNuD5mMsh8_MAs-nmhSToNFIyWoP-uTZ_LN2yQS1o9MB43fzuIIxp-1euXGxMceVVrjyidrYeEB13HS5kMHH-HGjiZhoIJBmu5es7pLPj9Ie8NJZ1K3kFhdVEJa4sLSID=DQAAAL4AAACypRIVyVXcs5zYIeUEt9v-wEwPKgQ8Oe23_URsDeHCg-rR2qQK4dTxPV1J6BPTO-6Zly2H9t4sVhm0vHe8IT6sKLdX2IQ8PgGMtSHQNkpQ8zEan0CyFyUetbSW4af6mlk2pksDpvXNm5GtNTj5eTwkCQUmgGep42u5iuCGFy-o9a1cQWz45NO_J8zIYnBdOqlheNTqaMWpi4hpr-_u8Muzs4RjlEbkuYfDu7MrdsJAFwxf0BVW2cGBtB-K2jwaK7w*Auth=*873hdyjsbcvuei73hckwoxnaodbc8dnskc8HU1mKRqxh6yEU-9tqx148GqC7h90_190ZzxpEZOHAH5HTptliylRXvMPyqPyijMNu21bOA6ZhvZFuL8YNB3KF63YuV0n5TFJd1-rMI2LQIdPMVBnsxnEGrLIeFOugAFCZ_3OelAc4XjeKdDvIowxkNnvaooXT4kxtkQWzieA3JRKy3Y-Lbi7E0qiXC99GtHVDh5VWvdTs2LCv3wnRULtLp6ZCoToZ8qoUWMzU9PZldsKSnE" 
m = re.search('Auth=(.+)',text).groups()[0] 
print m 

結果: '* 873hdyjsbcvuei73hckwoxnaodbc8dnskc8HU1mKRqxh6yEU-9tqx148GqC7h90_190ZzxpEZOHAH5HTptliylRXvMPyqPyijMNu21bOA6ZhvZFuL8YNB3KF63YuV0n5TFJd1-rMI2LQIdPMVBnsxnEGrLIeFOugAFCZ_3OelAc4XjeKdDvIowxkNnvaooXT4kxtkQWzieA3JRKy3Y-Lbi7E0qiXC99GtHVDh5VWvdTs2LCv3wnRULtLp6ZCoToZ8qoUWMzU9PZldsKSnE'

+0

あなたの例では文字列が複数行ではありません... –

+0

Scott Danleyさんに感謝しています。それは単純だと信じています... – jwesonga

+1

Non -regex version: 'text.split(" Auth = ")[1]' –

2

re.match,match checks for a match only at the beginning of the string, while search checks for a match anywhere in the stringの代わりにre.searchを試してみてください。

正規表現を作成するときは、おそらくまた、このようなものは、あなたが必要なものを行う必要があり、re.MULTILINEフラグが必要になります。

re.search("Auth=(.*)", data, re.MULTILINE) 

認証は最後の値ではありません場合は、その正規表現で.*を置き換えます次の値まで一致します。

0

正規表現の必要はなく、代わりにラインをループして=に分割します。ビットは冗長で、おそらく...

#!/usr/bin/python 

with open("auth") as fd: 
    for line in fd: 
     if 'Auth' in line: 
      auth=line.split('=')[-1].strip() 
      found=True 
     if found: 
      auth.join(line.strip()) 

*873hdyjsbcvuei73hckwoxnaodbc8dnskc8HU1mKRqxh6yEU-9tqx148GqC7h90_190ZzxpEZOHAH5HTptliylRXvMPyqPyijMNu21bOA6ZhvZFuL8YNB3KF63YuV0n5TFJd1-rMI2LQIdPMVBnsxnEGrLIeFOugAFCZ_3OelAc4XjeKdDvIowxkNnvaooXT4kxtkQWzieA3JRKy3Y-Lbi7E0qiXC99GtHVDh5VWvdTs2LCv3wnRULtLp6ZCoToZ8qoUWMzU9PZldsKSnE 
1

アンドリューの答えは正しいです。また、名前付きグループの機能についても言及します。文字列が複数行であり、常に同じ順序(SID、LSID、認証)で、あなたがこれを使用することができた場合は http://docs.python.org/library/re.html

0

import re 

text = "SID=whateverAuth=myauthvalue" 
m = re.search('Auth=(?P<auth>.+)', text, re.MULTILINE) 
print m.group('auth') #should print myauthvalue 

Pythonの公式ドキュメント:あなたは簡単に正規表現の部分を抽出することができます:

wantedresult = originalstring.strip().split('\n')[-1].split('=')[-1]

stripは、元の文字列の末尾にほとんどのサーバーには、余分な改行を削除する必要があります。

関連する問題