如何仅匹配字符长度为1的单词?或者在执行匹配操作后是否必须检查匹配的长度?我的过滤器如下所示:
sw = r'\w+,\s+([A-Za-z]){1}
所以它应匹配
rs =re.match(sw,'Herb, A')
但不应该匹配
rs =re.match(sw,'Herb, Abc')
答案 0 :(得分:2)
如果您使用\b\w\b
,则只会匹配一个字词类型的字符。所以你的表达将是
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
答案 1 :(得分:1)
您可以使用
(?<=\s|^)\p{L}(?=[\s,.!?]|$)
将匹配由空格字符或字符串结尾开头和后跟的单个字母。前瞻性也略微增加了标点符号......这一切都取决于你的输入数据。你也可以对非字母进行预测,但这引出了一个问题,“a123”是否真的是一个单字母的单词。或者“我是”。