1

如何仅匹配字符长度为 1 的单词?还是我必须在执行匹配操作后检查匹配的长度?我的过滤器如下所示:

sw = r'\w+,\s+([A-Za-z]){1}

所以它应该匹配

rs =re.match(sw,'Herb, A')

但不应该匹配

rs =re.match(sw,'Herb, Abc')
4

2 回答 2

2

如果您使用\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
于 2012-10-01T13:39:10.033 回答
1

您可以使用

(?<=\s|^)\p{L}(?=[\s,.!?]|$)

这将匹配前面和后面跟着空格字符或字符串结尾的单个字母。标点符号也增加了前瞻……这完全取决于您的输入数据。您也可以对非字母进行前瞻,但这引出了“a123”是否真的是一个单字母词的问题。或“我是”。

于 2012-10-01T13:49:30.867 回答