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

3

我有以下字符串:

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)

无法工作。

欢迎所有 正则表达式 高手提供建议。

1个回答

5

您可以通过以下方式进行搜索:

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

并替换为:

$1 or \\1

代码:

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

正则表达式演示


1
疯狂,比我的糟糕方法简单得多 :) - Colonel Beauvel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接