如果我有这样的字符串:
“word1”word2'word3“
是否可以使用正则表达式替换将字符串更改为:
“word1 word3'word2'”
我知道word1和word3会是什么,但不知道word2会是什么,但它总是用单引号。
答案 0 :(得分:7)
您可以将"word1 ('\w+') word3"
替换为"word1 word3 \1"
。替换语法在其他正则表达式引擎中可能不同;我正在使用基于Perl的.NET。
\w+
匹配一系列单词字符,即一个单词。如果它不符合你的定义,你可以改变它; \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+([^"]+?(?>"))$