我有以下字符串:
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
杀手的任何建议。
答案 0 :(得分:5)
您可以搜索:
^[-+*/]+|[-+*/]+$|([-+*/])[-+*/]+
并替换为:
$1 or \\1
代码:
gsub("^[-+*/]+|[-+*/]+$|([-+*/])[-+*/]+", "\\1", str1)