【问题标题】:How to negate regex expressions containing ranges?如何否定包含范围的正则表达式?
【发布时间】:2017-04-08 13:21:40
【问题描述】:

我有以下正则表达式,它标识字符串中的索引变量名称(符号数学方程):

[a-z][0-9]

我想删除字符串中不是索引变量名称的所有部分。我见过这样做的负面前瞻表达式,但是我见过的例子使用锚。如果这些示例包含变量名,它们将拒绝整个字符串,而不是替换字符串中不是变量名的部分。有没有一种有效的方法来实现这一点?我正在使用 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

【问题讨论】:

  • 如果您希望匹配的组以空格分隔,最好使用 Matcher 类并从捕获组中组装一个新字符串。
  • 请清楚地描述您的问题输出。你的输出是x0 + x2 = 7

标签: java regex-negation


【解决方案1】:

我很确定你想要的不能做,但是可以做的和更容易理解和代码的是:

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

【讨论】:

  • 这是提取这些变量名的更好方法。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
相关资源
最近更新 更多