看看正则表达式评估双方?

时间:2011-07-06 16:41:30

标签: regex lookaround

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

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

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

我已经设法用这个钉住大部分'em,它在加号之前和之后检查字符串:

(?<=[\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

在我当前的正则表达式处于困境状态,我想知道是否需要将模式包装在更大的条件中,或者我是否需要在外观中实现任一模式或模式。任何正则表达式都在那里小心翼翼地给它一个旋转吗?

1 个答案:

答案 0 :(得分:3)

这应该适用于您的示例:

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

将其替换为空格。

示例:

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

输出:

a b  a + b ++ c +++ d