亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式如何分隔多項式的項

正則表達式如何分隔多項式的項

溫溫醬 2023-10-13 10:21:12
我有一個字符串5x^3-2x^2+5x 我想要一個正則表達式,將該字符串拆分為 5x^3, -2x^2, 5x我嘗試過"(-)|(\\+)",但這沒有用。因為它沒有考慮負冪項。
查看完整描述

3 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

您可以使用此正則表達式分割字符串,


\+|(?=-)

它的工作方式是,它分割字符串消耗+字符,但如果有的話-它會分割使用-但不消耗-,因為這是向前看的。


看看這個Java代碼,


String s = "5x^3-2x^2+5x";

System.out.println(Arrays.toString(s.split("\\+|(?=-)")));

下面給出了您的預期輸出,


[5x^3, -2x^2, 5x]

編輯:


盡管在OP在他的帖子中的評論之一中他說,不會有負權力,但以防萬一你也有負權力,你可以使用這個正則表達式來處理負權力,


\+|(?<!\^)(?=-)

檢查這個更新的 Java 代碼,


List<String> list = Arrays.asList("5x^3-2x^2+5x", "5x^3-2x^-2+5x");

for (String s : list) {

    System.out.println(s + " --> " +Arrays.toString(s.split("\\+|(?<!\\^)(?=-)")));

}

新輸出,


5x^3-2x^2+5x --> [5x^3, -2x^2, 5x]

5x^3-2x^-2+5x --> [5x^3, -2x^-2, 5x]


查看完整回答
反對 回復 2023-10-13
?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

或許,

-?[^\r\n+-]+(?=[+-]|$)

或者一些類似的表達式也可能可以正常工作,以防萬一方程中可能有常數。

演示

測試

import java.util.regex.Matcher;

import java.util.regex.Pattern;



public class RegularExpression{


    public static void main(String[] args){


        final String regex = "-?[^\r\n+-]+(?=[+-]|$)";

        final String string = "5x^3-2x^2+5x\n"

             + "5x^3-2x^2+5x-5\n"

             + "-5x^3-2x^2+5x+5";


        final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);

        final Matcher matcher = pattern.matcher(string);


        while (matcher.find()) {

            System.out.println("Full match: " + matcher.group(0));

            for (int i = 1; i <= matcher.groupCount(); i++) {

                System.out.println("Group " + i + ": " + matcher.group(i));

            }

        }


    }

}

如果您希望簡化/修改/探索表達式,請在regex101.com的右上角面板上進行解釋。如果您愿意,您還可以在此鏈接中觀看它如何與某些示例輸入進行匹配。


正則表達式電路

jex.im可視化正則表達式:

https://img1.sycdn.imooc.com/6528aad30001cf1304200194.jpg

查看完整回答
反對 回復 2023-10-13
?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

在下面的程序中,您可以中斷每個變量。因此,請對其進行調試并根據需要組合正則表達式。它適用于所有輸入。


import java.util.regex.*;


class Main

{

  public static void main(String[] args)

  {

    String txt="5x^3-2x^2+5x";


    String re1="([-+]\\d+)";    // Integer Number 1

    String re2="((?:[a-z][a-z0-9_]*))"; // Variable Name 1

    String re3="(\\^)"; // Any Single Character 1

    String re4="([-+]\\d+)";    // Integer Number 2

    String re5="([-+]\\d+)";    // Integer Number 1

    String re6="((?:[a-z][a-z0-9_]*))"; // Variable Name 2

    String re7="(\\^)"; // Any Single Character 2

    String re8="([-+]\\d+)";    // Integer Number 3

    String re9="([-+]\\d+)";    // Integer Number 2

    String re10="((?:[a-z][a-z0-9_]*))";    // Variable Name 3


    Pattern p = Pattern.compile(re1+re2+re3+re4+re5+re6+re7+re8+re9+re10,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);

    Matcher m = p.matcher(txt);

    if (m.find())

    {

        String int1=m.group(1);

        String var1=m.group(2);

        String c1=m.group(3);

        String int2=m.group(4);

        String signed_int1=m.group(5);

        String var2=m.group(6);

        String c2=m.group(7);

        String int3=m.group(8);

        String signed_int2=m.group(9);

        String var3=m.group(10);

        System.out.print("("+int1.toString()+")"+"("+var1.toString()+")"+"("+c1.toString()+")"+"("+int2.toString()+")"+"("+signed_int1.toString()+")"+"("+var2.toString()+")"+"("+c2.toString()+")"+"("+int3.toString()+")"+"("+signed_int2.toString()+")"+"("+var3.toString()+")"+"\n");

    }

  }

}


查看完整回答
反對 回復 2023-10-13
  • 3 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號