文字長が 1 の単語だけを一致させるにはどうすればよいですか? または、マッチ操作を実行した後にマッチの長さを確認する必要がありますか? 私のフィルターは次のようになります。
sw = r'\w+,\s+([A-Za-z]){1}
だから合ってるはず
rs =re.match(sw,'Herb, A')
でも似合わないはず
rs =re.match(sw,'Herb, Abc')
を使用\b\w\b
すると、タイプ ワードの 1 文字のみに一致します。だからあなたの表現は
sw = r'\w+,\s+\w\b'
(\w
の前に少なくとも 1 つ\s
あるため、最初の は必要ありません\b
)
検証:
>>> sw = r'\w+,\s+\w\b'
>>> print re.match(sw,'Herb, A')
<_sre.SRE_Match object at 0xb7242058>
>>> print re.match(sw,'Herb, Abc')
None
使用できます
(?<=\s|^)\p{L}(?=[\s,.!?]|$)
これは、前後に空白文字または文字列の末尾が続く単一の文字に一致します。先読みは、句読点によっても少し強化されます...これはすべて、入力データに少し依存します。文字以外を先読みすることもできますが、「a123」が本当に 1 文字の単語なのかという疑問が生じます。または「私は」。