2017-01-03 15 views
0

私はユーザー名のリストを取得できるように、私は文字列の特定のセクションを解析しようとしているいくつかのpythonコードを持っています。私は正規表現がダウンしている(私はそれをオンラインでテストし、動作するように見える)が、私はテストコードを実行するとき、私はエラーが発生したとして、実際に私が必要なものをつかむように見えない:regex.matchは部分文字列を見つけられませんか?

if parsed_mod_string.group(1):
AttributeError: 'NoneType' object has no attribute 'group'

私は基本的に理解していますが、私のコードは私の正規表現の比較では何も返されません。私のコードは以下の通りです。

If zero or more characters at the beginning of string match the regular expression..

re.matchは "アンカー" の検索機能で、次のとおりです。ドキュメントre.matchパー

import re 
MOD_LIST_MSG = re.compile(r":\w+\.\w+\.\w+ NOTICE #\w+ :The moderators of this room are:(.*)") 

test_msg = ":tmi.twitch.tv CAP * ACK :twitch.tv/commands\r\n:tmi.twitch.tv NOTICE #secondubly :The moderators of this room are: mod1, mod2, mod3, mod4\r\n" 

parsed_mod_string = MOD_LIST_MSG.match(test_msg) 
if parsed_mod_string.group(1): 
    mod_list = parsed_mod_string.group(1).split(', ') 
    print(mod_list) 
+1

あなたがよく例入力を投稿する務め、撮影したテキストを希望されるだろう。また、 'if parsed_mod_string:'を実行してマッチをテストします。一致するものがなければ 'if parsed_mod_string.group(1):'でエラーが出ます。 – dawg

+0

@ user2864740私はちょうどそのことをPythonで試してみる前に行いました - それはうまく動作しますが、私のコードでは動作しません([this editor](https://vgy.me/BSiA0d.png)参照)。 。 –

答えて

1

re.searchにこれを比較します

Scan through string looking for the first location where [the pattern matches..]

+0

正直言って、それはそれほど簡単ではないと信じられません。それが私の問題を解決しました! –

+0

@TaiM。わーい! FWIW - 私は最初にラインを分割してから(各ラインにre.matchを適用する)、正規表現を分割することで問題を単純化することができます。また、リテラルドットは[。]や\とよくマッチします。 。ワイルドカードとの過剰一致を避けるためです。 – user2864740

関連する問題