import re
p = re.compile(r'(\b\w+)\s+\1')
a = p.search('Paris in the the spring').group() print(a) 代码如上,执行结果是:the the 在 Python3 中使用原始字符串写正则表达式,\b 在这里我的理解是“单词”边界,也就是 Paris in the the spring 的开头和结尾位置,\w 是匹配任意 Unicode 单词字符,+是执行至少一次\w,然后再是匹配空白字符(\s 的意思),+是执行至少一次\s,\1 是再一次执行前面的所有匹配。 这里我想问的是为什么是从 the 开始匹配,而不是从 Paris 开始。 如果是从 the 开始,那结果为什么不是 “ the 空格 the 空格” 即 “ the the ” 而是“ the 空格 the ” 即 “ the the ”
1
azh7138m 2017-08-19 12:28:06 +08:00 via Android
最后一个问题是因为,你写的是
(\b\w+)\s+\1 而不是 (\b\w+\s+)\1 所以是"the the" |
2
ethanlu 2017-08-19 12:29:46 +08:00 via Android
整个正则是括号匹配到的在 s+之后再匹配一次,你字符串里面就只有 the 空格 the 符合。为什么不是 the 空格 the 空格,你把第一个右括号移到+s 后面应该就是了。
|
3
x18960 2017-08-19 12:35:32 +08:00 via iPhone
这个东西 你应该去菜鸟教程看看,我就在那里学的,这个叫反向引用
|
4
dallaslu 2017-08-19 12:50:35 +08:00
\b 是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter ),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b 并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。
http://www.jb51.net/tools/zhengze.html |
9
code42 2017-08-20 15:31:35 +08:00
第一个问题:
你用的是 search,而不是 match 第二个问题: 反向引用之前匹配的(\b\w+)中不包含空格 直接 help(re)告诉你所有真相:) |