⊗pyPmREHHy 47 of 129 menu

Python正規表現における角括弧内のハイフン

ハイフンも [ ] 内では特殊文字です (外側ではそうではありません)。ハイフン自体を文字として必要とする場合は、グループの区切り文字として認識されない位置に配置してください。

これが重要な理由:意図せずに文字グループを作成してしまう可能性があるからです。たとえば、'[:-@]' のように記述すると、コロン、ハイフン、アットマークを選択しているつもりでも、実際には : から @ までの文字グループになってしまいます。このグループには次の文字が含まれます:? < = > :

これらはどこから来たのでしょうか?ASCIIテーブルからです。 - コロンの文字コードはアットマークよりも小さいため、グループが形成されます。つまり、すべてのグループはASCIIテーブルに基づいて作成されます(必要に応じてこれを利用できます)。

対策:ハイフンを、確実にグループ文字として認識されない位置、例えば先頭や末尾(つまり [の直後や ]の直前)に配置します。

ハイフンをエスケープすることもできます。そうすれば、位置に関わらずハイフン自体を表します。例えば、[:-@] の代わりに [:\-@] と記述すれば、グループではなく、コロン、ハイフン、アットマーク @ の3文字を表します。

次の例では、検索パターンは次のようになります: 数字 1、次に 'a' から 'z' までの文字、次に数字 2

txt = '1a2 1-2 1c2 1z2' res = re.sub('1[a-z]2', '!', txt) print(res)

コードの実行結果:

'! 1-2 ! !'

では、ハイフンをエスケープしてみましょう。 結果として、検索パターンは次のようになります:数字 1、次に文字 'a'、または ハイフン、または文字 'z'、次に数字 2

txt = '1a2 1-2 1c2 1z2' res = re.sub('1[a\-z]2', '!', txt) print(res)

コードの実行結果:

'! ! 1c2 !'

エスケープせずにハイフンの位置を変更するだけでも可能です:

txt = '1a2 1-2 1c2 1z2' res = re.sub('1[az-]2', '!', txt) print(res)

コードの実行結果:

'! ! 1c2 !'

次の例では、検索パターンは次のようになります: 最初の文字は小文字またはハイフン '-'、その後ろに2つの文字 'x'

txt = 'axx Axx -xx @xx' res = re.sub('[a-z-]xx', '!', txt) print(res)

コードの実行結果:

'! Axx ! @xx'

次の例では、検索パターンは次のようになります: 最初の文字は小文字、大文字、またはハイフン '-'、その後ろに2つの文字 'x'

txt = 'axx Axx -xx @xx' res = re.sub('[a-zA-Z-]xx', '!', txt) print(res)

コードの実行結果:

'! ! ! @xx'

ハイフンを2つのグループの間に配置することもできます - この位置では確実に別のグループを作成しません:

txt = 'axx 9xx -xx @xx' res = re.sub('[a-z-0-9]xx', '!', txt) print(res)

コードの実行結果:

'! ! ! @xx'

実践問題

以下の文字列が与えられます:

txt = 'xaz xBz xcz x-z x@z'

次のパターンに一致するすべての文字列を見つけてください: 文字 'x'、大文字または小文字 またはハイフン、文字 'z'

以下の文字列が与えられます:

txt = 'xaz x$z x-z xcz x+z x%z x*z'

次のパターンに一致するすべての文字列を見つけてください: 文字 'x'、次にドル記号、または ハイフン、またはプラス記号、その後ろに文字 'z'

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否