2016-05-13 19 views
1

正規表現の構文が正しい結果を返していません。 mdファイル(https://developer.github.com/v3/pulls/#list-pull-requests-files)のパッチキーを解析する際に、3つの可能な文字列を返すgithub3.pyライブラリを使用して、GitHubから返されたデータがあります。私は、正規表現のドキュメントといくつかのスレッドを読んだが、私は構文で何かを見逃している。Python regex文が正しい結果を返さない

string1 = '> [HELP.SELECTOR]'
string2 = '-> [HELP.SELECTOR]'
string3 = '+> [HELP.SELECTOR]'

私はstring1が発見された場合string2またはstring3とFalseに完全に一致する真印刷したいです。 string2またはstring3が見つかった場合、私の結果はFalseに戻ります。

for prs in repo.pull_requests(): 
    search_string_found = 'False' 
    regex_search_string1 = re.compile(r"^\+>\s\[HELP.SELECTOR\]") 
    regex_search_string2 = re.compile(r"^->\s\[HELP.SELECTOR\]") 
    for data in repo.pull_request(prs.number).files(): 
     match_text1 = regex_search_string1.search(data.patch) 
     match_text2 = regex_search_string2.search(data.patch)       
     if match_text1 is not None and match_text2 is not None: 
      search_string_found = 'True' 
      break 

    print('HELP.SELECTOR present in file: ', search_string_found) 
+1

'regex_search_string = re.compile(r"^[+ - ]> \ s \ [HELP \ .SELECTOR \] ")'、 'regex_search_string.search(data .patch): ' –

+0

あなたの解決策は機能しました。私はキャレットを削除して正規表現を微調整し、正しい結果が返されました。 'regex_search_string = re.compile(r" [\ + - ]> \ s \ [HELP \ .SELECTOR \] ")'となります。 – DBS

+0

これは、必要な文字列が文字列の先頭にないことを意味します。 –

答えて

1

あなたの文字列は、文字列の先頭に位置していないことも確認しているので、あなたが

を必要とします
regex_search_string = re.compile(r"[+-]>\s\[HELP\.SELECTOR\]") 
for data in repo.pull_request(prs.number).files(): 
    match_text = regex_search_string.search(data.patch) 
    if match_text: 
     search_string_found = 'True' 
     break 

注:

  • [+-]試合のいずれか+またはそれ以降の-
  • -これまでエスケープする必要はありません、それ[...]内部
  • +の内側に指定された範囲/セットからの1文字に一致文字クラスであります[...]の先頭または最後にエスケープする必要はありません
  • re.searchは一致するデータオブジェクトまたはNoneを返します。テキスト一致/捕獲された
0

正規表現の文字列を複数保持する方が簡単です。これを試してみてください:

import re 

strings = [ 
    '> [HELP.SELECTOR]$', 
    '-> [HELP.SELECTOR]$', 
    '+> [HELP.SELECTOR]$', 
] 

for string in strings: 
    print (bool(re.match(r'[-+]> \[HELP.SELECTOR\]$', string)), string) 

結果:

False > [HELP.SELECTOR] 
True -> [HELP.SELECTOR] 
True +> [HELP.SELECTOR] 

があなたの問題にそれを適用すると、

#UNTESTED 
for prs in repo.pull_requests(): 
    search_string_found = any(
     re.match(r'[-+]> \[HELP.SELECTOR\]', data.patch) 
     for data in repo.pull_request(prs.number).files()) 
    print('HELP.SELECTOR present in file: ', search_string_found) 
関連する問題