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]

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可視化正則表達式:

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");
}
}
}
添加回答
舉報