正则表达式以反转字符串中单词的顺序

时间:2014-11-11 02:01:00

标签: python regex

我被判了一个句子,其中两个单词用逗号分隔:

即。

  

这个大而快的虫子吃的是较慢的虫子。

并要求写一个正则表达式来反转关于逗号的两个单词的顺序,以便打印出来:

'The fast, big bug...'

到目前为止我所拥有的:

我认为它涉及逗号和空格的findall,然后是某种反向函数。

4 个答案:

答案 0 :(得分:2)

(\w+)(\s*),(\s*)(\w+)

试试这个。\4\2,\3\1。见。演示。

http://regex101.com/r/tF5fT5/32

import re
p = re.compile(ur'(\w+)(\s*),(\s*)(\w+)', re.IGNORECASE)
test_str = u"The big, fast bug ate the slower one."
subst = ur"\4\2,\3\1"

result = re.sub(p, subst, test_str)

答案 1 :(得分:2)

您需要re.sub()作为:

>>> a="The big, fast bug ate the slower one. The quick, brown fox jumps over the lazy dog"
>>> re.sub(r'\s(\w*),\s+(\w*)\s',r' \2, \1 ',a)
'The fast, big bug ate the slower one. The brown, quick fox jumps over the lazy dog'

它只替换由','分隔的单词。以相反的顺序使用相同的单词,保留字符串的其余部分。

答案 2 :(得分:1)

导入重新

re.sub('(\ w +)\ s *,\ s *(\ w +)','\\ 2,\\ 1',)

  
    
      

re.sub('(\ w +)\ s *,\ s *(\ w +)','\\ 2,\\ 1','快速,大错误')

             

'大而快的错误'

    
  

\ s *匹配零个或多个空格

\ w +匹配一个单词。 \ w基本上是[a-zA-Z0-9 _]

向后引用\ 1(转义为\\ 1)替换第一个子字符串匹配,依此类推

我们只尝试匹配逗号两边的单词并切换匹配的子串

https://docs.python.org/2/library/re.html

答案 3 :(得分:0)

re.sub('(\w+), (\w+)', '\\2, \\1', s)