我无法理解正则表达式语法的工作原理。我尝试用它从String中读取多项式的系数和度数。我看到了类似的问题,但对我来说还不够清楚。找到了如何提取系数,但当我尝试做同样的程度时,我发现它击败了我。 对于如下输入:2x ^ 3 + 3x ^ 2
//for coeff
String[] coef = str.split("x\\^\\d+\\+?");
for (String part : coef)
{
System.out.println(part);
}
//for degree
String[] degree = str.split("+\\+?\\d");
for (String part : degree)
{
System.out.println(part);
}
已经咨询this。
答案 0 :(得分:4)
我建议使用匹配单个正则表达式而不是使用2个不同的正则表达式并进行2次拆分操作:
Pattern p = Pattern.compile( "(-?\\b\\d+)[xX]\\^(-?\\d+\\b)" );
然后,您可以使用Matcher.find()
获取coef
(匹配的组1)和学位(匹配的组2)。
<强>代码:强>
String input = "2x^3-3x^-2";
Pattern p = Pattern.compile( "(-?\\b\\d+)[xX]\\^(-?\\d+\\b)" );
Matcher m = p.matcher( input );
while (m.find()) {
System.out.println("Coef: " + m.group(1));
System.out.println("Degree: " + m.group(2));
}
答案 1 :(得分:2)
String monomPattern = "((-?\\d+(?=x))?(-?[xX])(\\^(-?\\d+))?)|((-?)[xX])|(-?\\d+)";
如果您没有任何空格,这应该有用。如果你有,简单地说 为字符串调用replaceAll(“\ s +”,“”)方法。 (此方法不会更改原始字符串,因此您必须将其分配给自身)
e.g. textField = textField.replaceAll("\\s+","");
IMS
答案 2 :(得分:1)
答案 3 :(得分:0)
试试这个REGEX:
getData() {
this.dataService.getData()
.subscribe(data => {
this.results = data;
for (let x of this.results) {
var link = x.info.link;
this.dataService.getDataQuery(link)
.subscribe(data => {
// Assumes the data returned by getDataQuery function is an array
// If it is wrapped in a json object, just retrieve it
// like x.info.link = data.fieldName; for example
x.info.link = data;
});
}
});
}
您可以在此处运用正则表达式:REGEXR