1

好的,我有一个非常棘手的正则表达式问题。

我需要用空格匹配并替换以下字符串中的 + 符号,因此左侧的字符串必须成为右侧的字符串。

1: word+word   =  word word
2: word+++word =  word + word
3: word.+word  =  word. word
4: word,+word  =  word, word

我已经设法用这个来确定大部分时间,它会检查加号前后的字符串:

(?<=[\w\.,])\+(?=[\w])

但是,我一次只能在 (2) 中确定一组相邻的加号:

(?<=[\w\.,\+])\+(?=[\w]) // gets the left plus sign
2: word+++word =  word++ word

(?<=[\w\.,])\+(?=[\w\+]) // gets the right plus sign
2: word+++word =  word ++word

在我当前的正则表达式困惑状态下,我想知道是否需要将模式包装在更大的条件下,或者是否需要在环视中实现一个或模式。那里有任何正则表达式专家愿意试一试吗?

4

1 回答 1

3

这应该适用于您的示例:

(?<!\+)\+|\+(?!\+)

用空格替换它。

例子:

perl -E "$_='a+b++a+++b++++c+++++d'; s/(?<!\+)\+|\+(?!\+)/ /g; say"

输出:

a b  a + b ++ c +++ d
于 2011-07-06T16:46:22.127 回答