まず、スペースを に置き換える\s+
か\s
、実際にスペースが 1 つだけの場合 (英語のテキストではダブル スペースがよく見られます) を使用することをお勧めします。
次に、大文字に一致させるには を使用する必要がありますが[A-Z]
、機能しA-Z
ません (ただし、... 以外の大文字が存在する可能性があることに注意してA-Z
ください)。
さらに、これが機能しない理由もわかっていると思います。またはが前\. [A-Z]
に付いていない場合、正規表現エンジンは一致を試みます。問題は、 が前にある場合、が前にないため、最初のパターンが一致するということです。が前に付いている場合は、が前に付いていないため、2 番目のパターン バージョンが一致します。どちらの方法でも、これらのパターンのいずれかが一致し、相互に排他的になります。Abs
S
S
Abs
Abs
S
Abs
S
質問の最初の部分のパターンは次のようになります
(?<!Abs)(?<!S)(\. [A-Z])
また
(?<!Abs)(?<!S)(\.\s+[A-Z])
(私の提案で)
これは、回避する必要があるためです。それがなけれ|
ば、式はAbsが先行せず、S が先行しないと言うようになりました。両方が true の場合、パターン マッチャーは引き続き文字列をスキャンし、一致するものを見つけます。
月の名前を除外するために、次の正規表現を思い付きました。
(?<!Abs)(?<!S)(\.\s+)(?!January|February|March)[A-Z]
同じ議論が否定的な先読みパターンにも当てはまります。