正则加递归去除指定的多个字符

原字符串 String str="SUM(TA0047/(TA0012+TA0023+SUM((TA0034+TA0045))))"
程序处理过的字符串
String newStr="TA0047/(TA0012+TA0023+(TA0034+TA0045))"

目的就是去掉SUM() 或者AVG() 等等....

思路.....不清晰....求助

4个回答

试一下这个

 public static void main(String[] args) {
        // 按指定模式在字符串查找
        String line = "SUM(TA0047/(TA0012+TA0023+SUM((TA0034+TA0045))))";
        String pattern = "(.*)?SUM\\((.*)\\)";

        // 创建 Pattern 对象
        Pattern r = Pattern.compile(pattern);

        // 现在创建 matcher 对象
        Matcher m = r.matcher(line);
        while (m.find()) {
            String s = null;
            try {
                //尝试获取第二个
                s = m.group(2);
                line = m.group(1) + m.group(2);
            } catch (Exception e) {
                //不存在第二个,则获取第一个
                s = m.group(1);
                line = m.group(1);
            }
            System.out.println("Found value: " + s);

            m = r.matcher(line);
        }

        System.out.println(line);
    }
weixin_42920757
小小菜鸟2020 因为SUM函数可能出现在开头,也可能出现在内部,所以需要分开处理,这也是为什么代码里面会有第一个和第二个的区别
大约一年之前 回复
weixin_42920757
小小菜鸟2020 正则的含义是,匹配SUM函数,SUM字符串你可以替换成其他的字符串,最外层再包一个while循环,使用字符串拼接的方式修改正则
大约一年之前 回复
qq_34166594
易燃易爆闻一多 很强,兄得......//俩个问题,第一那个正则的含义...麻烦您解释下。第二...您这个是固定模式的,但是字符串并不是固定,是不是对您这个方法加以修改就可以实现呢
大约一年之前 回复

直接replace SUM或者AVG为空就好了,后面的括号不影响吧。

qq_34166594
易燃易爆闻一多 ...额,不行,如果不影响,我也不发这个贴子了
大约一年之前 回复

可以循环,每次找到一个SUM(),就取出分组,一直到不存在SUM()

let ss="SUM(TA0047/(TA0012+TA0023+SUM(TA0034+TA0045)))+AVERAGE(((())))";

let removeQuo=(str,targetReg="SUM")=>{
//接收参数 SUM | AVERAGE

let matchReg=new RegExp(`(${targetReg}\\(|\\(|\\))`,'g');
let targetRegContent=`${targetReg}(`;

let leftKuo="_l_";     //左括号临时替换
let rightKuo="_r_";     //右括号临时替换
let targetRKuo="_@r_";     //SUM(右括号临时替换
let targetLKuo="_@l_";   //SUM(左括号替换
let matchSign=[0,0];    //匹配记录
let i=0;
while(str.match(matchReg)){
    let matchContent=str.match(matchReg)[0];
    switch(matchContent){
        case targetRegContent:
            matchSign=[...matchSign,1,0];
            str=str.replace(matchContent,targetLKuo);
            break;
        case "(":
            matchSign[matchSign.length-1]+=1;
            str=str.replace(matchContent,leftKuo);
            break;
        case ")":
            for(let i=matchSign.length-1;i>=0;){
                if(matchSign[i]==0){
                    i--;
                }else{
                    matchSign[i]--;
                    if(i%2){
                        //偶数位,匹配右括号
                        str=str.replace(matchContent,rightKuo);
                    }else{
                        //奇数位,匹配SUM右括号
                        str=str.replace(matchContent,targetRKuo);
                    }   
                    break;
                }    
            }
            break;
    }
    i++;
    if(i>1000){
        console.error("公式替换出现错误");
    }
}
str=str.replace(/(\_\@r\_|\_\@l\_)/g,'');
str=str.replace(/\_l\_/g,'(');
str=str.replace(/\_r\_/g,')');
return str;

}
var str="";
str=removeQuo(ss,'AVERAGE');
str=removeQuo(str,'SUM');
console.log(str)


谢谢帮助,和前端商讨学习,搞出来一个可适用的方法

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
去除首尾指定字符
使用的时候,调一下方法就好。 /** * 去除首尾指定字符 * * @param str 字符串 * @param element 指定字符 * @return */ public static String trimFirstAndLastChar(String str, String element) { boolean beginIndexFlag = true; b...
去除字符串的指定字符
假如有字符串“6sabcsssfsfs33” ,用最有快速的方法去掉字符“ab3”,不能用java内置字符串方法(indeOf,substring,replaceAll等)? [code="java"] class Remove{  public static void main(String args[]) {   String str="6sabcsssfsfs33; ...
正则去除指定的html代码问题
如题,正则也不是怎么会用,后来搜索了下相关的问题,得到的结果多是这样的正则去除rnrn[code=PHP]rn$tagname 是指定要去除的html标签rn$sc = '/<' . $tagname . '(?:\s[^>]*)\?\>([\s\S]*?)?<\/' . $tagname . '>/is';[/code]rnrn拿a标签举例:rn如果没理解错误的话是 上面是取得任何内容2这样的结果 rn如果我要是替换的掉所取得的内容的话 里面的任何内容2 应该也就被替换掉了,我要保留这部分rn所以改成了 rn[code=PHP]rn$tagname 是指定要去除的html标签rn$sc="/<*?".$tagname."[^>]*?>/is";[/code]rnrn但是这样能把前面的东西去掉,后面的 等等 却不能去掉了rnrn之前看到过有人用| 或的方式 "(<" + tag[i] + @"[\s\S]*?>)|()";rn但是 似乎依旧不起作用,报错。rnrn请问下我该如何更改这例正则呢?可以完全去除 指定的html标签的
去除字符串指定的首尾字符
原生的trim()只能去除首尾空格,为了更方便的处理一些拼接的数据 如: s;b;c;,在String原型上扩展了trims() 方法 /** * 去除字符串 指定的首尾字符 * @param { String } code * @return 去除后的字符串 * 示例: ';;;aaaa;;;'.trims(';') ==&amp;gt; 'aaaa' */ if(!String.prot...
pandas中去除指定字符
例表: 假如想要去掉表中的‘#’,‘;’而且以‘#’和‘;’为分割线切割数据: #将dfxA_2的每一个分隔符之间的数据提出来 col1=dfxA_2['travel_seq'].str.split('#').str[0] col2=dfxA_2['travel_seq'].str.split('#').str[1] col3=dfxA_2['travel_
去除字符串中指定字符
/********************************************************************************************************* ** 函数名称: spcStringStrip ** 功能描述: 去除缓冲区中的回车和空格 ** 输 入  : cString :需要格式化的缓冲区 **         : iLen ...
在字符串中去除指定的字符
[code=c]rn#include rnrnvoid squeeze(char s[], int c);rn/* delete all c from s */rnint main()rnrn char s[50];rn int c;rnrn printf("Please enter a string: ");rn scanf("%s", s);rn getchar();rn printf("Enter the c: ");rn scanf("%c", &c);rn squeeze(s, c);rn rn return 0;rnrnvoid squeeze(char s[], int c)rnrn int i, j;rnrn for (i = j = 0; s[i] != '\0'; ++i) rn if (s[i] != c) rn s[j] = s[i];rn ++j;rn rn rn s[j] = '\0';rn printf("%s\n", s);rn[/code]rn在vc++6.0下运行字符串内容不变,把字符c声明和定义中都改成char再跑一遍就可以去除c,求高手解答~我输入的字符都是字母,在squeeze函数中比较时,不都是自动转成ascii码来比较的吗,为什么改变变量c的类型会有影响?
去除字符串末尾指定的字符实例
/**      * 去除字符串末尾指定的字符      * @param str 操作的字符串      * @param zf 需要去除的字符      * @return      */     public static String getReplaceStrEndZf(String str,String zf){         if(Def2Val.zfcFkyzBoo
去除字符串首尾指定字符
/** * 去除字符串首尾出现的某个字符. * * @param source 源字符串. * @param element 需要去除的字符. * @return String. */ public static String trimFirstAndLastChar(String source, String elemen...
JAVA 去除前后指定字符
/** * 去除前后指定字符 * @param source 目标字符串 * @param beTrim 要删除的指定字符 * @return 删除之后的字符串 * 调用示例:System.out.println(trim(", ashuh ",",")); */ public St
如何去除指定字符后面全部字符?
一个表名为用户表的数据是这样的rn用户名 rnA1-ZN-A rnA2-DDrnB2rn如何去除-号后面全部字符得到rn用户名rnA1rnA2rnB2rn我是这样写的:SELECT STUFF(用户名, CHARINDEX('-', 用户名), 254, '') AS 新用户名 FROM 用户表 rn但是得到的结果是rnA1rnA2rnNULLrn请教各位rn
求去除所有空白字符正则
rn如:aaabbbbbrnrn上述空白不是全角字符也不是半角,谢谢rn
Python 正则去除字符串中的指定元素
在获取数据时,经常会遇到        ['\n文字\n']       [‘\r\r文字\r\r’]       ['文\xa0\xa0字]       ... ... 这样的数据  为了保证数据的清洁  使用正则表达式去除指定的元素 例如:  去除  '文\xa0\xa0\xa0\xa0字'  中\xa0只保留文字 import re a = '文\xa0\xa0\xa0...
java字符串的操作:去除字符、替换字符、多个字符分隔字符串
// 去除空格,换行,制表符 public String replaceBlank(String str) { String dest = ""; if (str!=null) { Pattern p = Pattern.compile("\\s*|\t|\r|\n"); // 去除多个空格,去除制表符,回车,换行 Matcher m = p.matcher(str); dest =
java String去除前后指定字符
/**      * 去除前后指定字符      * @param args 目标字符串      * @param beTrim 要删除的指定字符      * @return 删除之后的字符串      * 调用示例:System.out.println(trim("$$abc $","$"));        */     public static String trim(S
Qt之去除指定行首/行尾字符(串)
使用正则表达式替换字符或使用left(right),remove接口操作...
php去除字符串中指定字符
有时候需要清除指定字符串中的字符有以下两种比较简单的方法可实现,当然也可用正则直接把需要去除的替换成空串 例如:清除abcdef"中的" 1、: <?php $string = 'abcdef"'; $arr = explode('"',$string); echo $arr[0]; ?> 2、<?php $string = 'abcdef"'; $arr = tri
去除字符串当中指定重复字符
package test1; /** * * @author Administrator *1:查找一个字符串当中指定字符所出现的次数 */ public class 字符查找 { public static void main(String[] args) { // TODO Auto-generated method stub String s1=&quot;abaacddfdsfd...
关于去除指定字符间内容的问题
求一个方法,去除“/*...*/”或“...”之间内容,也要去掉“/* */”或“ ”这样的边界符
正则一例:给字符加单引号
有字符串 :a,b,c,d 替换成  'a','b','c','d'preg_replace(&quot;/\w/&quot;,&quot;'$0'&quot;,'a,b,c,d')javascript版&quot;a,b,c,d&quot;.replace(/(\w)/g,function($0){return &quot;'&quot;+$0+&quot;'&quot;})
C# 中如何去除指定的字符
从电子秤读取出来的数据到TEXT中 如 "+ 29.35 g"rn如何把"+","g"和空格去除 只要29.35
Mysql去除字段内容两边指定字符
update t_film_info set film_director = trim(BOTH '' FROM trim(film_director)) -- 去除字段内容两边指定字符
如何去除字符串中的指定字符
如何用正则表达式实现 不用replace函数rnrnstring str="a%b!c!d@e&";rnrn去除% ! @ &等特殊字符 得到结果abcde
如何去除字符串中指定字符
string ss="a,"b",c,"d"";rn如何把ss中的“去掉
怎样去除文本中含有指定字符的超链接?
点击进入 rn把含有dfji字符的超链接全部去除rn即把[color=#FF0000]点击进入[/color]删除
Linux命令 -- sed命令,去除指定字符 ---- ()\-等等
1.命令echo "(hello\) main --- wrd" | sed 's/[()\-]//g'
去除字符串中指定的字符或字符串
分析以下需求,并用代码实现 1.键盘录入一个源字符串由字符串变量scrStr接收 2.键盘录入一个要删除的字符串由字符串变量delStr接收 3.要求 删除该字scrStr符串中的所有delStr字符串(最终的字符串中不能包含delStr),要求打印删除后的结果以及删除了几个delStr字符串 4.代码运行打印格式: 请输入源字符串:java woaijava,i like jajavava ...
python 去除字符串中指定字符
python中的strip()可以去除头尾指定字符 ss = '我的电话是18827038663,也是微信号,\n 请加入,谢谢\n\n\n' print(ss.strip('\n')) 结果: 我的电话是18827038663,也是微信号, 请加入,谢谢 可以看到只能删除头尾指定字符。 想要去除中间字符,可以使用replace()函数 ss = '我的电话是188270386...
Java之去除String串中指定字符
public String deleteCharString(String sourceString, char chElemData) { StringBuffer stringBuffer = new StringBuffer(&quot;&quot;); for (int i = 0; i &amp;lt; sourceString.length(); i++) { ...
python使用转移字符去除多个空格
1.假设有这样的字符串 '早餐服务                                                                                    ¥15'2.去除步骤如下:str = '早餐服务 ...
问个正则的匹配指定字符的小问题
[code=JScript]var srccom = ''; [/code]rnrn这个是正则匹配 img中包含ABC的图片,想问下 要是不包含 ABC 的正则怎么写?
jquery 正则截取指定字符前的数据
请问现在有一串字符“abcdefg Fw:123456 Fw:7891011”rnrn我想用正则 获取 第一个Fw前的abcdefg 请问应该怎么写 谢谢
js正则替换指定的所有字符
文件名字:js正则替换指定的所有字符.html 文件代码: 转换日期格式 function calcWeek(dt){ var da = (dt.replace(/-/g, "/"))     // 把2016-05-24 转换为2016/05/24   return  da } alert("2016-05-24 转换格式为"+calcWeek('2
正则问题。不能剔除指定的字符
一个正则:"//is"rn不能实现剔除iframe。请问该怎么改改。。
php 正则 不匹配 指定字符??
php 正则 不匹配 指定字符,怎么写??rn比如rn$str ='have a test 123123';rn if (preg_match_all("/have\s*a\s*([^test]\s*123123)/" , $str ,$reg)) rn //把$str的test不匹配掉怎么搞??rn rnrnrn还有就是php正则表达式里的!有什么作用,是指定!后不能出现的字符嘛???
用正则取出指定字符之间的内容
我要通过正则分别取出下面 与 之间的字符串rnrn1、在 与 之间的字符串是没法固定的,是随机自动生成的rn2、其中 与的数量也是没法固定的,也是随机自动生成的rnrnrn ** 这里是不固定的字符串1 ** rn ** 这里是不固定的字符串2 ** rn ** 这里是不固定的字符串3 ** rnrnrn请问怎样写呢?谢谢大家帮忙,我搞了一天都搞不出来,谢谢
求救正则怎样指定字符成对出现
sss(a)sdfasdfsdf((a) )rnrnrn我要获得的是(a), a, ((a) )rn我看了一堆资料都没找到类似的解析
JS正则判断多个连续相同字符
var reg1 = /(\w)\1\1/g; //判断2个连续字符 var reg2 = /(\w)\1{2}/g; //判断3个连续字符 var reg3 = /(\w)\1\1/g; //判断3个连续字符 var str = 'aa!@#123AaAaAAA3'; str.match(reg1); // 输出['aa','AA'] str.match(reg2); // 输出['A...
正则,必须包含多个指定字母
某个字符串 必须包含多个指定的字母才能通过。 rnrn如某个字符串 str ,它必须包含 "a",并且包含"c",并且包含 "e" ,"ace" 为 一个字母乱序排列的字符串。rnrn稍微看了下正则教材,没看到逻辑与的运算,不知道怎么搞了。rn
去除字符
我要实现去除字符。比如在文件中有一行字符串rna,b,c,drn如何去掉c后面的字符,成为a,b,crn我用write_file.write("\b\b"); 用vi看c后面是^H^Hrn通常你是如何处理的rnrn谢谢
相关热词 c# login 居中 c# 考试软件 c# 自然语言分析 c# 分段读取文件 c# 泛型反射 c#打断点 c# 时间转多少秒 c# 线程函数加参数 c# modbus 读取 c#查询集合表