好的,我有一个非常棘手的正则表达式问题。
我需要使用空格匹配并替换以下字符串中的+符号,因此左侧的字符串必须成为右侧的字符串。
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
在我当前的正则表达式处于困境状态,我想知道是否需要将模式包装在更大的条件中,或者我是否需要在外观中实现任一模式或模式。任何正则表达式都在那里小心翼翼地给它一个旋转吗?
答案 0 :(得分:3)
这应该适用于您的示例:
(?<!\+)\+|\+(?!\+)
将其替换为空格。
示例:
perl -E "$_='a+b++a+++b++++c+++++d'; s/(?<!\+)\+|\+(?!\+)/ /g; say"
输出:
a b a + b ++ c +++ d