以下はPythonの正規表現です。その?:
意味は何ですか?表現は全体的に何をしますか?「」などのMACアドレスとどのように一致し00:07:32:12:ac:de:ef
ますか?
re.compile(([\dA-Fa-f]{2}(?:[:-][\dA-Fa-f]{2}){5}), string)
これ(?:...)
は、キャプチャされないグループ化括弧のセットを意味します。
通常、(...)
正規表現を書き込むと、一致したマテリアルが「キャプチャ」されます。非キャプチャバージョンを使用すると、キャプチャされません。
正規表現が特定の文字列と一致した後、パッケージ内のメソッドを使用して、正規表現と一致するさまざまな部分を取得できます。re
この正規表現は、MACアドレス「00:07:32:12:ac:de:ef」とどのように一致しますか?
それはあなたが最初に尋ねたものとは異なる質問です。ただし、正規表現の部分は次のとおりです。
([\dA-Fa-f]{2}(?:[:-][\dA-Fa-f]{2}){5})
最も外側の括弧のペアは、括弧をキャプチャしています。文字列に対して正規表現を正常に使用すると、それらが囲むものが利用可能になります。
[\dA-Fa-f]{2}
パーツは、ペアで数字()または\d
16進数に一致し、その後に、一致するマテリアルがコロンまたはダッシュ(または)である非キャプチャグループが続き、その後に別の16進数のペアが続き、全体が正確に5回繰り返されます。回数。A-Fa-f]
{2}
:
-
p = re.compile(([\dA-Fa-f]{2}(?:[:-][\dA-Fa-f]{2}){5}))
m = p.match("00:07:32:12:ac:de:ef")
if m:
m.group(1)
最後の行は、文字列「00:07:32:12:ac:de」を出力する必要があります。これは、6組の16進数の最初のセットであるためです(文字列の合計7組のうち)。実際、外側のグループ化括弧は冗長であり、省略した場合m.group(0)
は機能します(それらでも機能します)。7ペアを一致させる必要がある場合は、5を6に変更します。それらを拒否する必要がある場合は、正規表現にアンカーを配置します。
p = re.compile(^([\dA-Fa-f]{2}(?:[:-][\dA-Fa-f]{2}){5})$)
カレット^
は文字列の先頭と一致します。ドル$
は文字列の終わりと一致します。5を使用すると、サンプル文字列と一致しません。5の代わりに6を使用すると、文字列と一致します。
?:
as inを使用すると(?:...)
、置換中にグループがキャプチャされなくなります。検索中は意味がありません。
あなたの正規表現は
r"""
( # Match the regular expression below and capture its match into backreference number 1
[\dA-Fa-f] # Match a single character present in the list below
# A single digit 0..9
# A character in the range between “A” and “F”
# A character in the range between “a” and “f”
{2} # Exactly 2 times
(?: # Match the regular expression below
[:-] # Match a single character present in the list below
# The character “:”
# The character “-”
[\dA-Fa-f] # Match a single character present in the list below
# A single digit 0..9
# A character in the range between “A” and “F”
# A character in the range between “a” and “f”
{2} # Exactly 2 times
){5} # Exactly 5 times
)
"""
お役に立てれば。
(?:...)
非catureグループを意味します。グループはキャプチャされません。