为了账号安全,请及时绑定邮箱和手机立即绑定

获取非条件部分的子串

获取非条件部分的子串

C#
噜噜哒 2022-01-16 19:59:30
例如,我有这个字符串:2X+4+(2+2X+4X) +4括号的位置可以变化。我想知道如何在没有括号的情况下提取部分。例如我想要2X+4+4. 有什么建议?我正在使用 C#。
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

尝试简单的字符串索引和子字符串操作,如下所示:


string s = "2X+4+(2+2X+4X)+4";


int beginIndex = s.IndexOf("(");

int endIndex = s.IndexOf(")");


string firstPart = s.Substring(0,beginIndex-1);

string secondPart = s.Substring(endIndex+1,s.Length-endIndex-1);


var result = firstPart + secondPart;

解释:

  1. 获取第一个索引 (

  2. 获取第一个索引 )

  3. 创建两个子字符串,第一个是 1 索引之前beginIndex删除数学符号,如 +

  4. 第二个是 post endIndex,直到字符串长度

  5. 连接两个字符串顶部得到最终结果


查看完整回答
反对 回复 2022-01-16
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

尝试正则表达式方法:


var str = "(1x+2)-2X+4+(2+2X+4X)+4+(3X+3)";

var regex = new Regex(@"\(\S+?\)\W?");//matches '(1x+2)-', '(2+2X+4X)+', '(3X+3)'

var result = regex.Replace(str, "");//replaces parts above by blank strings: '2X+4+4+'

result = new Regex(@"\W$").Replace(result, "");//replaces last operation '2X+4+4+', if needed

//2X+4+4              


查看完整回答
反对 回复 2022-01-16
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

试试这个:


var str = "(7X+2)+2X+4+(2+2X+(3X+3)+4X)+4+(3X+3)";


var result =                                           

    str

        .Aggregate(

            new { Result = "", depth = 0 },

            (a, x) => 

                new

                {

                    Result = a.depth == 0 && x != '(' ? a.Result + x : a.Result,

                    depth = a.depth + (x == '(' ? 1 : (x == ')' ? -1 : 0))

                })

        .Result

        .Trim('+')

        .Replace("++", "+");


//result == "2X+4+4"

这处理嵌套、前导和尾随括号。


查看完整回答
反对 回复 2022-01-16
  • 3 回答
  • 0 关注
  • 168 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信