2017-07-06 10 views
1

私は正規表現を使用して "Cp_6%3A"と "&"という2つの既知のパターンの間にカプセル化された文字列を探します。文字であるか、または&でなく、文字列の末尾になります。Python Regexを使用して2つのタグの間でフレーズを検索する

私のコードは次のようになります。

def extract_id_from_ref(ref): 
    id = re.search("Cp\_6\%3A(.*?)(\& | $)", ref) 
    print(id) 

しかし、これは、任意のアイデアを何も生産されていませんか?問題は、正規表現パターンでスペースは、も考慮されていることである事前

+1

マッチグループ... – hwnd

+0

を参照してください。つまり、 'id.group(0)'や任意の項目を参照してください。 [ここ](https://docs.python.org/2/library/re.html)を参照してください。 – patrick

答えて

1

(\& | $)は、&文字とそれの後のスペース、またはスペースと文字列の最後のいずれかに一致します(スペースはここで意味があります)。

正規表現(NO交替基の必要性、または遅延ドットマッチングパターン)を簡素化し、次いで.group(1)にアクセスするために否定文字クラス[^&]*&以外のゼロまたはそれ以上の文字)を使用:

def extract_id_from_ref(ref): 
    m = re.search(r"Cp_6%3A([^&]*)", ref) 
    if m: 
     print(m.group(1)) 

注意こと_%は特別な正規表現のメタ文字であり、エスケープする必要はありません。

regex demoを参照してください。

0

感謝。だから、あなたが書くべき

r"Cp_6\%3A(.*?)(?:\&|$)" 

をあなたは、その後に一致した場合さらに文字列にバックスペースを追加するために、あなたは\\(2つのバックスラッシュ)を追加したり、生の文字列を使用する必要がありますどちらか:

def extract_id_from_ref(ref): 
    id = re.search(r"Cp_6\%3A(.*?)(?:\&|$)", ref) 
    print(id) 

これは動作するはずです。

関連する問題