次の行を書いたプログラマーは、おそらく という 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
さて、その++ 前の方が面白いです。これは所有量指定子であり、これを使用すると、正規表現マッチャーがパターンのすべての可能な順列を試行するのを防ぎます。これはパフォーマンスの最適化であり、壊滅的なバックトラッキングの問題を防ぐものです。