0

次のコードでは、数字を一致させようとしています。数字は16桁または15桁で、スペースまたは-4桁ごとの間にある場合があります。

次のようなエラーが発生します

ValueError: Cannot process flags argument with a compiled pattern

私は何が間違っているのですか?

import re

p_number = re.compile(r'(\d{15}|\d{16}|\d{4}[\s-]\d{4}[\s-]\d{4}[\s-]\d{4})')
c=["1234567891234567","123456789123456","1234 5678 9123 4567","1234-5678-9123-4567","1234567891111111tytyyyy"]

for a in c:
  #re.search(c,p_number,flag=0)
  matchObj = re.search( p_number , a, re.M|re.I)
  if matchObj:
     print "match found"
  else:
     print "No match!!"
4

1 に答える 1

7

.compile()代わりに、フラグを呼び出しに渡す必要があります。

p_number = re.compile(r'(\d{15}|\d{16}|\d{4}[\s-]\d{4}[\s-]\d{4}[\s-]\d{4})', re.M|re.I)

.search()コンパイルされたパターンを呼び出すことができます。

matchObj = p_number.search(a)

完全なスクリプトは次のようになります。

import re

p_number = re.compile(r'(\d{15}|\d{16}|\d{4}[\s-]\d{4}[\s-]\d{4}[\s-]\d{4})', re.M|re.I)
c=["1234567891234567","123456789123456","1234 5678 9123 4567","1234-5678-9123-4567","1234567891111111tytyyyy"]

for a in c:
    matchObj = p_number.search(a)
    if matchObj:
        print "match found"
    else:
        print "No match!!"

match foundそして5回印刷します。

于 2013-01-02T11:24:39.463 に答える