>>> import re
# does not match when \. is within word boundary
>>> re.match(r'^(?P<first_init>\b\w\.\b)\s(?P<mid_init>\b\w\.\b)\s(?P<last_name>\b\w+\b)$', 'J. F. Kennedy')
# matches when \b is moved to left of \.
>>> re.match(r'^(?P<first_init>\b\w\b\.)\s(?P<mid_init>\b\w\b\.)\s(?P<last_name>\b\w+\b)$', 'J. F. Kennedy') # matches
您过度使用了
\b
分词符。在\b
只有在一方有有效的“word”字符而另一方没有时,\b
将只匹配。现在您将使用此构造两次:。。而且,正确地说,它不匹配,因为在左边你有一个非单词字符(一个句号),而在另一边你有一个非单词字符(空格)。在
删除句号和
\s
之间的\b
就足够让它工作了。在\b
只在单词的开头或结尾匹配空字符串。单词是一系列字母数字或下划线字符。点(.
)不能构成单词的一部分。在在这个意义上,
.
不是单词的一部分。参见docs here。在由于
\.
(点)字符,它不匹配。单词边界不包括点(它可能与您想要的单词的定义不同)。不需要\b
,您可以轻松地重写它。仔细阅读documentation。在相关问题 更多 >
编程相关推荐