文字列がパターンに一致するかどうかを確認する


317

文字列がこのパターンに一致するかどうかを確認するにはどうすればよいですか?

大文字、数字、大文字、数字...

例、これらは一致します:

A1B2
B10L1
C1N200J1

これらはそうではありません(「^」が問題を指摘しています)

a1B2
^
A10B
   ^
AB400
^

3
それが問題である理由をもっと説明してもらえますか?
ジョンウー

4
^([A-Z]\d+){1,}$このような?
通行人

3番目の例では、問題はでBなく、にあるはずAです。
Burhan Khalid 2012

多分それは問題のタイプミスです。両方AB小文字は正しいですか?A10baB400
John Woo

@バーハン、問題はAにあります。Bの隣に番号があり、Aにはないからです
DanielTA

回答:


465
import re
pattern = re.compile("^([A-Z][0-9]+)+$")
pattern.match(string)

編集:コメントに記載されているようmatchに、文字列の先頭の一致のみをチェックし、文字列のre.search()任意のパターンに一致します。(参照:https : //docs.python.org/library/re.html#search-vs-match


20
上のドキュメントからre.matchIf zero or more characters at the beginning of string match the regular expression pattern。文字列の終わりに一致しない理由を理解するために30分ほど費やしました。でそれは不可能のようmatchです、そうですか?そのため、re.search(pattern, my_string)しかし動作します。
conradkleinespel

2
@conradkはい、そうです。^最初にを使用すると、暗黙のようなものがあると思いますmatch。非常に単純な説明よりも少し複雑だと思いますが、はっきりしません。ただし、文字列の先頭から始まることは間違いありません。
CrazyCasta 2016

173

一発ギャグ: re.match(r"pattern", string) # No need to compile

import re
>>> if re.match(r"hello[0-9]+", 'hello1'):
...     print('Yes')
... 
Yes

bool必要に応じて評価できます

>>> bool(re.match(r"hello[0-9]+", 'hello1'))
True

import re最初の行として欠落
arod

それは変だ。なぜre.matchのコンテキストで使用できるのにifbool他の場所で使用している場合は使用する必要がありますか?
LondonRob 2018年

16
に注意してくださいre.match。文字列の先頭でのみ一致します。re.search代わりに見てください。
LondonRob 2018年

@LondonRobはおそらくif一致がないかどうかをチェックするためNoneです。
デニス

不正な文字範囲エラーなどの正規表現のエラーがないことを確認するためにコンパイルする必要があります
Suh Fangmbeng

36

以下をお試しください:

import re

name = ["A1B1", "djdd", "B2C4", "C2H2", "jdoi","1A4V"]

# Match names.
for element in name:
     m = re.match("(^[A-Z]\d[A-Z]\d)", element)
     if m:
        print(m.groups())

1
これは、グループを取得するために必要な一致を返す唯一のケースです。私の意見では最良の回答です。
リック・スミス

24
import re
import sys

prog = re.compile('([A-Z]\d+)+')

while True:
  line = sys.stdin.readline()
  if not line: break

  if prog.match(line):
    print 'matched'
  else:
    print 'not matched'

7

正規表現はこれを簡単にします...

[A-Z] AとZの間の1文字に完全に一致します

\d+ 1桁以上の数字に一致します

() 物事をグループ化(そして物事を返す...しかし、今のところはそれらをグループ化することを考えてください)

+ 1つ以上を選択します


6
  
import re

ab = re.compile("^([A-Z]{1}[0-9]{1})+$")
ab.match(string)
  


私はそれが大文字の数字パターンでうまくいくと信じています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.