我被判了一个句子,其中两个单词用逗号分隔:
即。
这个大而快的虫子吃的是较慢的虫子。
并要求写一个正则表达式来反转关于逗号的两个单词的顺序,以便打印出来:
'The fast, big bug...'
到目前为止我所拥有的:
我认为它涉及逗号和空格的findall
,然后是某种反向函数。
答案 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)替换第一个子字符串匹配,依此类推
我们只尝试匹配逗号两边的单词并切换匹配的子串
答案 3 :(得分:0)
re.sub('(\w+), (\w+)', '\\2, \\1', s)