如何仅匹配字符长度为 1 的单词?还是我必须在执行匹配操作后检查匹配的长度?我的过滤器如下所示:
sw = r'\w+,\s+([A-Za-z]){1}
所以它应该匹配
rs =re.match(sw,'Herb, A')
但不应该匹配
rs =re.match(sw,'Herb, Abc')
如果您使用\b\w\b
,您将只匹配一个 word 类型的字符。所以你的表达是
sw = r'\w+,\s+\w\b'
(因为\w
前面至少有一个\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”是否真的是一个单字母词的问题。或“我是”。