Regex Python正则表达式sub()

Regex Python正则表达式sub(),regex,python-3.x,Regex,Python 3.x,因此,我正在学习python,需要有关上述正则表达式的帮助。请更正,但是'\1'用于捕获第一个单词。两个问题: 为什么需要括号 为什么我将上面的行更改为: agentNamesRegex = re.compile(r'Agent (\w)\w*') agentNamesRegex.sub(r'\1****', 'Agent Alice told Agent Carol that Agent Eve knew Agent Bob was a double agent.') A**** to

因此,我正在学习python,需要有关上述正则表达式的帮助。请更正,但是
'\1'
用于捕获第一个单词。两个问题:

  • 为什么需要括号
  • 为什么我将上面的行更改为:

    agentNamesRegex = re.compile(r'Agent (\w)\w*') 
    
    agentNamesRegex.sub(r'\1****', 'Agent Alice told Agent Carol that Agent Eve knew Agent Bob was a double agent.') 
    
    A**** told C**** that E**** knew B**** was a double agent.'
    
  • 我想我一开始不理解
    (\w)
    \1
    的概念。你能帮忙吗?我并没有考虑任何具体的输出,但在spider中尝试了不同的东西,以便更好地了解正则表达式并理解上面的表达式

    为什么需要括号

    括号用于捕获一组字符。
    \1
    返回第一个捕获的组。在正则表达式
    r'Agent(\w)\w*”
    中,
    (\w)
    周围的括号捕获
    “Agent”
    后面的第一个单词字符,即代理名称的第一个字母。然后将捕获的字母替换回输出中,以代替每个匹配的子字符串的
    \1

    为什么我将上面的行更改为:

    agentNamesRegex = re.compile(r'Agent (\w)\w*') 
    
    agentNamesRegex.sub(r'\1****', 'Agent Alice told Agent Carol that Agent Eve knew Agent Bob was a double agent.') 
    
    A**** told C**** that E**** knew B**** was a double agent.'
    

    该正则表达式正在查找单词“Agent”,后跟空格,后跟8个或更多单词字符。输入字符串中没有与该模式匹配的内容。(你的代理名称都太短了。)

    如果没有匹配的模式,为什么输出是“爱丽丝代理告诉卡罗尔代理,伊芙代理知道鲍勃代理是双重代理”而不是“没有”。如果模式不匹配,输出不应该为“无”。@Abhi,因为您正在调用
    sub
    。由于模式没有匹配项,
    sub
    不会进行替换,因此您的输出字符串与输入字符串相同。非常感谢您的帮助!!
    agentNamesRegex = re.compile(r'Agent (\w)(\w)(\w)(\w)(\w)(\w)(\w)(\w)\w*')