请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

结果和预想不一样

import re
a = 'r11er11d33'
r = re.sub('(\w{3})\w\1', '\g<1>', a, 1)
print(r)

想问下老师为什么这段代码的运行结果是r11er11d33,而不是r11d33呢?

另外转义字符加数字,比如 '\1' 是什么作用呢?

正在回答

2回答

我觉得你应该先告诉我,为什么你认为他不应该是这样的。

0 回复 有任何疑惑可以回复我~
  • 提问者 榴莲不流 #1
    我想的是,正则表达式里\1引用group1的内容,所以'(\w{3})\w\1'匹配的应该是r11er11;然后替换为group1的内容,也就是把r11er11替换为为r11,所以返回的字符串不应该是r11d33吗?
    回复 有任何疑惑可以回复我~ 2018-06-16 10:39:54
  • 提问者 榴莲不流 #2
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-06-18 16:18:56
7七月 2018-06-16 13:04:23

你这个是贪婪匹配

0 回复 有任何疑惑可以回复我~
  • 提问者 榴莲不流 #1
    这个正则表达式哪里和贪婪匹配有关系呢?\w{3}不是一定要匹配3个单词字符吗?
    回复 有任何疑惑可以回复我~ 2018-06-16 18:44:13
  • 7七月 回复 提问者 榴莲不流 #2
    抱歉看错了,我觉得你这里的问题是没理解()的用法,你可以把替换先去掉,看看你的正则匹配的结果。
    回复 有任何疑惑可以回复我~ 2018-06-17 08:52:28
  • 提问者 榴莲不流 回复 7七月 #3
    我用re.findall函数匹配正则表达式'(\w{3})\w\1',返回的结果是空列表,然后用r'(\w{3})\w\1'匹配的话成功返回['r11']。是不是\w和\1只有在原生字符串中才代表单词字符和group呢?
    回复 有任何疑惑可以回复我~ 2018-06-17 10:01:57
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信