2017-04-08 198 views
1

我有以下的正则表达式,用于标识一个字符串(一个象征性的数学方程式)内索引的变量名:如何否定包含范围的正则表达式?

[a-z][0-9]

我想删除所有部分是字符串的不是索引变量名称。我已经看到了这样做的消极lookahead表达式,但我见过的例子使用锚点。这些示例会拒绝整个字符串(如果它们包含变量名称),而不是替换不是变量名称的字符串部分。有没有一种有效的方法来完成这一点?我使用Java的的replaceAll()方法来尝试实现这一点:

String s = "5x0 +3x2 = 7"; // I should get "x0 x2" after the regex 
s.replaceAll("[a-z][0-9]", ""); // this should be negated 
+0

如果您希望匹配的组空间分隔,最好使用Matcher类并从捕获组中组装一个新字符串。 – phatfingers

+0

请清楚描述你的问题输出。你的输出是什么?x0 + x2 = 7'? –

回答

1

我敢肯定你想不能做什么,但可以做什么,什么是更容易理解和代码是:

Matcher m = Pattern.compile("[a-z][0-9]").matcher(s); 
while (m.find()) { 
    String variable = m.group(); // do with it what you will 
} 
+0

这是更好的方法来提取这些变量名称。谢谢! – ZakDaniels99