正则表达式替换以更改句子中单词的顺序

时间:2010-09-14 18:00:49

标签: regex

如果我有这样的字符串:

  

“word1”word2'word3“

是否可以使用正则表达式替换将字符串更改为:

  

“word1 word3'word2'”

我知道word1和word3会是什么,但不知道word2会是什么,但它总是用单引号。

4 个答案:

答案 0 :(得分:7)

您可以将"word1 ('\w+') word3"替换为"word1 word3 \1"。替换语法在其他正则表达式引擎中可能不同;我正在使用基于Perl的.NET。

  • \w+匹配一系列单词字符,即一个单词。如果它不符合你的定义,你可以改变它;
  • 括号用于分隔表达式中的组。第一个是第一组,第二个是第二组,等等。通常正则表达式引擎将第0组计为整个匹配;
  • 替换字符串中的\1表示使用匹配中的第一组,\2表示第二组,等等。

答案 1 :(得分:4)

我会说:

s/"(word1)\s+('.+?')\s+(word3)"/"$1 $3 $2"/

答案 2 :(得分:3)

搜索:\"word1 (\'[a-zA-Z0-9]+\') word3\" 并替换为"word1 word3 \1"

如果您想要匹配的不仅仅是字母数字字符,还可以将(.+)用于word2(在捕获组#1中)。我认为\w也可以使用,但由于某些原因我不经常使用它。也许我并不总是同意正则表达式引擎关于什么应该是一个“单词”字符,所以我更喜欢更明确。

答案 3 :(得分:0)

遵循其他建议......

这个表达式将确保word3是字符串中的最后一个单词(向前查找“然后结束字符串”),但允许除“单引号和双引号”之外的“单词”的任何字符。

('[^']+?')\s+([^"]+?(?>"))$