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

标签 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 killer 的任何建议。

最佳答案

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

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

并替换为:

$1 or \\1

代码:

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

RegEx Demo

关于regex - 删除连续的数学运算符,在字符串的开头和结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28407929/

相关文章:

r - 空数据框的数据框列名

r - 如何在带有 Sweave 的 minipage 中使用 ggplot2 图形?

r - 按多个组计算跨多列的最大值

regex - gsub 替换并保留大小写

javascript - javascript 正则表达式中的 d 标志是什么意思?

java - 选择子字符串的正则表达式

r - 如何将控制台输出开到/拆分/复制到R中的变量中?

r - 取决于数字长度的零填充正则表达式

正则表达式模式匹配在 scala.js 中不起作用?

Javascript 正则表达式 : replacing $1 with f($1)