字符串替换正则表达式仅在[]之外获取令牌

时间:2011-08-31 21:31:01

标签: java regex str-replace

我试图用'+'替换字符串中的所有空格。但它应该忽略忽略[]内的空格。有人知道如何使用正则表达式。

示例:

latitude[0 TO *] longitude[10 TO *]

应替换为

latitude[0 TO *]+longitude[10 TO *]

2 个答案:

答案 0 :(得分:2)

替换(启用“全局”标志)

\s(?=[^\]]*(?:\[|$))

+

解释

\s          # white-space (use an actual space if you want)
(?=         # but only when followed by (i.e. look-ahead)...
  [^\]]*    #   ...anything but a "]"
  (?:       #   non-apturing group ("either of")
    \[      #     "["
    |       #     or
    $       #     the end of the string
  )         #   end non-capturing group
)           # end look-ahead

这假设在字符串中没有错误的打开/关闭方括号并且方括号从不嵌套时匹配任何不在方括号内的空格。

答案 1 :(得分:1)

我建议使用机器状态而不是正则表达式。这样,当您在[]内部时,可以停止替换空格。如果你使用正则表达式,你可能需要使用前瞻,使其更复杂。这里有一个类似的例子:
Replace whitespace outside quotes using regular expression