2017-01-30 4 views
0

はここ..私はCHAP [0-9]を述べてきたように私の正規表現は、Pythonで正確に一致取得されていない

import re 

l=["chap","chap11","chapa","chapb","chapc","chap3","chap2","chapf","chap4","chap55","chapf","chap33","chap54","chapgk"] 
for i in l: 
    matchobj=re.match(r'chap[0-9]',i,re.M|re.I) 
    if matchobj: 
     print(i) 

...私のコードですので、それだけでこれらの文字列は、唯一の整数の後に従うべきですCHAP

ので、私は次の出力を取得する必要があります。..

chap3 CHAP2 chap4

が、私はfollowiを取得していますNG出力... chap11 chap3 CHAP2 chap55 chap33 chap54

+2

あなたは '\のD 'を使用して番号範囲を簡素化することができます – revo

答えて

3

matchは、文字列の先頭にあなたのパターンに一致する chap4。追加あなたのパターンに文字列'$'またはワード境界'\b'の終わり:から

matchobj=re.match(r'chap\d$',i,re.M|re.I) 
# \d (digit) is shortcut for [0-9] 

docsre.match上:文字列の先頭にゼロ以上の文字が正規表現パターンに一致する場合

は、対応を返しますMatchObjectインスタンス。

+0

[0-9] \ B'単語境界'やつを追加します。 – Niitaku

+0

@Nititakuパターンを短くし、通常は意味の違いがないので、これを追加しました。しかし、 '\ d'は' [0-9] 'よりも多くの文字を一致させることができます – schwobaseggl

1

正規表現の末尾にドル記号を追加する必要があります。ドル($)は文字列の終わりを意味し、将来の参照のために、カラット(^)は先頭を意味します。

import re 

l=["chap","chap11","chapa","chapb","chapc","chap3","chap2","chapf","chap4","chap55","chapf","chap33","chap54","chapgk"] 
for i in l: 
    matchobj=re.match(r'chap[0-9]$',i,re.M|re.I) 
    if matchobj: 
     print(i) 

出力

chap3 
chap2 
chap4 
+0

しかし、それはちょうど1つの整数と一致する必要があります。 –

関連する問題