【问题标题】:How can I inverse a regex expression to use it in java replaceAll method? [duplicate]如何反转正则表达式以在 java replaceAll 方法中使用它? [复制]
【发布时间】:2015-02-11 11:09:38
【问题描述】:

我需要字符串示例的最后一个字母字符:ABRACADABRA123456。正则表达式 [a-zA-Z](?=\d+) 在所有情况下都给我匹配。如何更改(反向)表达式以在 java 方法中使用它,例如:"ABRACADABRA123456".replaceAll(<inverse-regex>,"")

输入:ABRACADABRA123456
使用:"ABRACADABRA123456".replaceAll(...)
OUTPUT:A(字符串的最后一个字母字符)

已解决:System.out.println("ABRACADABRA123456".replaceAll("([\\D]+)([a-zA-Z](?=\\d+))([\\d]+)","$2")));

【问题讨论】:

  • 你的预期输出是什么?
  • 预期在括号中输出一个字母字符:ABRACADABR(A)123456
  • @usmandam 如果原始正则表达式是“一些数字前的字母”,那么“逆”是什么? 一些数字之后的字母?一个字母不是后跟数字?一些字母前的数字?我可以继续...

标签: java regex replaceall lookaround character-class


【解决方案1】:

[a-zA-Z](?=\d+) 不会匹配最后一个字母字符。

System.out.println("ABRACADABRA123456".replaceAll("([A-Za-z])(?=[^A-Za-z]*$)","($1)"));

上述正则表达式仅在字母后跟任何非字母字符零次或多次直到最后一次时才会捕获字母。所以它只匹配最后一个字母。

输出:

ABRACADABR(A)123456

【讨论】:

  • 预期输出是最后一个A
  • 见上面的正则表达式。它匹配最后一个 A。您也可以在模式和匹配器类中使用上述正则表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多