2017-12-12 12 views
1

reを使用して特定の単語を取得しようとしています。私のコードが読み込まれ、ファイルのリストが開きます。regexpを使って特定の単語を取得する

import re 
id_list = [] 
my_str = 'Error: Unable to version with file_id `a123-4567-89001` on server `serverA`' 
match = re.search("file_id(.*)$", my_str) 
if match: 
    out_list.append(match.group(1)) 

print list(set(id_list)) 
# Result : [' `a123-4567-89001` on server `serverA`'] 

私はバックティック内のIDを取得するに思えますが、しかし同時に私はfile_id言葉

どのように私は、このようなIDコードをつかむためにコーディングすることができた後、他のすべての単語を取得しています結果はa123-4567-89001ですか?

+1

参照[このPythonのデモ](https://ideone.com/Txfi3T)。 –

+0

@WiktorStribiżewスニペットを回答として投稿し、私はそれをアップヴォートするでしょう。 – Tobias

答えて

2
Iが一致し、その後 file_idとバッククォートの後に任意の0+の空白文字にマッチする、と示唆している

キャプチャグループ1にバッククォート以外の任意の0+文字:

file_id\s*`([^`]*)`  

regex demo

を参照してください。 詳細

  • file_id - リテラルストリング
  • \s* - 0+空白
  • ` - バッククォート
  • ([^`]*) - バッククォート
  • `以外の任意の0+文字 - バッククォート

Python demo

を参照してください。
import re 
id_list = [] 
my_str = 'Error: Unable to version with file_id `a123-4567-89001` on server `serverA`' 
match = re.search(r"file_id\s*`([^`]*)`", my_str) 
if match: 
    id_list.append(match.group(1)) 

print list(set(id_list)) 
# => ['a123-4567-89001'] 
+0

最初の一致を得るには、少し単純なコードデモ(https://ideone.com/DbqSJt)があります。 –

+1

クールな、私は以前の何か類似のものを探すことを試みていましたが、表現とテスト文字列の入力が増えています。 – dissidia

1

パターン「file_id (。*?)(。*?) ``サーバー上の ``」

>>> import re 
>>> re.findall("file_id `(.*?)` on server `(.*?)`", 'Error: Unable to version with file_id `a123-4567-89001` on server `serverA`') 
[('a123-4567-89001', 'serverA')] 
1

あなたはこれを試すことができます。

import re 
my_str = 'Error: Unable to version with file_id `a123-4567-89001` on server `serverA`' 
the_id = re.findall('(?<=file_id\s\`)[a-z0-9-]+(?=\`)', my_str)[0] 

出力:

'a123-4567-89001' 
1

2例があるのでstringにバッククォートがある場合は、file_idの後ろにあるものを抽出します。

これを行うには、file_idを検索し、空白(\s)の文字にマッチさせ、次にバックティックをマッチさせ、次のバックティックまですべてをキャプチャします。

「すべてまで」をキャプチャするには、lazy quantifierを使用することができます。これには、*?が含まれています。これは、これより前のすべてを?に一致させることを意味します。だから、

、正規表現にこれを入れて、我々が得る:素晴らしい作品

file_id\s`(.*?)` 

>>> match = re.search("file_id\s`(.*?)`", my_str) 
>>> match.group(1) 
'a123-4567-89001' 
関連する問題