在字符串的开头和结尾连续删除数学运算符

时间:2015-02-09 10:46:28

标签: regex r

我有以下字符串:

str1 = "+58*/-47+-2*"
str2 = "++*46+8+*7+2*1"
str3 = "-9*-"

我想要以下输出:

ostr1 = "58*47+2"
ostr2 = "46+8+7+2*1"
ostr3 = "9"

例如规则是:

  • 数学运算符为+, - , /, *

  • 当字符串中至少有两个连续的数学运算符时,取第一个。

  • 在字符串的开头或结尾处禁止所有连续的数学运算符。

到目前为止,我填写第三个条件:

gsub("(.*)[\\+|-|\\*|/]+$", "\\1", gsub("^[\\+|-|\\*|/]+(.*)", "\\1", str1))

这似乎不是很优雅..而且我正在努力争取第二个条件:

gsub("([\\+|-|\\*|/]{1})[\\+|-|\\*|/]+", "\\1", str1)

不起作用。

欢迎来自regex杀手的任何建议。

1 个答案:

答案 0 :(得分:5)

您可以搜索:

^[-+*/]+|[-+*/]+$|([-+*/])[-+*/]+

并替换为:

$1 or \\1

代码:

gsub("^[-+*/]+|[-+*/]+$|([-+*/])[-+*/]+", "\\1", str1)

RegEx Demo