python使用正则表达式交换单词

Lud*_*sed 4 python regex substitution

今天,我正在学习很多正则表达式,但是我已经陷入了困境。我正在尝试在python中使用正则表达式交换单词,但似乎无法弄清楚。

s = 'How are you guys today'
# This is what I tried so far, but i obviously miss something 
# because this is giving an IndexError: no such group
re.sub(r'\w+\w+', r'\2\1', s)
Run Code Online (Sandbox Code Playgroud)

预期结果

'are How guys you today'
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 5

您需要使用捕获组并在单词之间匹配非单词字符:

import re
s = 'How are you guys today'
print(re.sub(r'(\w+)(\W+)(\w+)', r'\3\2\1', s))
# => are How guys you today
Run Code Online (Sandbox Code Playgroud)

参见Python演示

(\w+)(\W+)(\w+)模式将匹配和捕获3组:

  • (\w+) -第1组(在替换模式中以\1 编号的反向引用引用):一个或多个字字符
  • (\W+)-第2组(用指代\2):一个或多个非单词字符
  • (\w+) -第3组(与一起使用\3):一个或多个单词字符