次の行を書いたプログラマーは、おそらく という python パッケージを使用していますregex
。
UNIT = regex.compile("(?:{A}(?:'{A})?)++|-+|\S".format(A='\p{Word_Break=ALetter}'))
A='\p{Word_Break=ALetter}'
誰かが何を-+
意味するかを説明するのを手伝ってもらえますか?
演算子は\p{property=value}
Unicode コードポイント プロパティに一致し、リンク先のパッケージ インデックス ページに記載されています。
スクリプトとブロックを含む Unicode コードポイント プロパティ
\p{property=value}; \P{property=value}; \p{value} ; \P{value}
エントリは、コードポイントが値を持つWord_Break
プロパティを持つ任意の Unicode 文字に一致しますALetter
(現在、Unicode コードポイント データベースには 24941 個の一致があります。詳細については、Unicode テキストのセグメンテーション、単語境界の章の仕様を参照してください)。
あなたが示した例では、標準のpython文字列フォーマットも使用して、部分式をコンパイル中の正規表現に補間しています。.format(A='...')
「{A}」の部分は、その部分を埋める単なるプレースホルダーです。最終結果は次のとおりです。
"(?:\p{Word_Break=ALetter}(?:'\p{Word_Break=ALetter})?)++|-+|\S"
シーケンスは、Python モジュールの式と同様に、-+
1 つ以上のダッシュに一致するだけで、実際には特別なものではありません。-
re
さて、その++
前の方が面白いです。これは所有量指定子であり、これを使用すると、正規表現マッチャーがパターンのすべての可能な順列を試行するのを防ぎます。これはパフォーマンスの最適化であり、壊滅的なバックトラッキングの問題を防ぐものです。