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

时间:2017-05-03 09:52:48

标签: 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)

预期结果

'are How guys you today'

2 个答案:

答案 0 :(得分:5)

您需要使用capturing groups并在单词之间匹配非单词字符:

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

请参阅Python demo

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

  • (\w+) - 第1组(替换模式中称为\1 numbered backreference):一个或多个字符
  • (\W+) - 第2组(简称\2):一个或多个非单词字符
  • (\w+) - 第3组(简称\3):一个或多个字符

答案 1 :(得分:0)

您需要使用群组来实现此目的。您还应在组中指明空格。以下输出您想要的内容。

s = 'How are you guys today'
re.sub(r'(\w+ )(\w+ )', r'\2\1', s)