正则表达式 - 如果后面跟着另一个字符,则只选择一个字符

时间:2012-04-05 14:36:27

标签: java regex

我想替换char'&'如果它没有跟'#'。例如,在此字符串"& hello &# world!"中,我只想选择第一个'&'。

到目前为止,我想出了这个正则表达式:

&[^#]

但是,这会选择2个字符,而我只想选择&符号。

RegExp Gurus的任何帮助都将不胜感激。

顺便说一句
。这可能很重要:我想在java replaceAll()中使用它。

非常感谢, 达莫

7 个答案:

答案 0 :(得分:3)

使用否定前瞻:

System.out.println("& hello &# world!&".replaceAll("&(?!#)", "&"));

打印:

& hello &# world!&

答案 1 :(得分:2)

String s = "&$ &# &s &";
String r = s.replaceAll("&([^#])|(&$)", "&$1");
System.out.println("r = " + r);

打印:

r = &$ &# &s &

答案 2 :(得分:2)

您需要的是negative lookahead。考虑一下这个简单的代码:

String str = "& &$ &# &s &#";
str = str.replaceAll("&(?!#)", "&");
// assigns: & &$ &# &s &#

这基本上意味着如果没有跟 &,则替换#

答案 3 :(得分:1)

  • 您可以使用@#或任何其他不可能的字符序列替换所有&#;#。
  • 替换所有&按照你想要的方式
  • 并将所有@#替换为&#

答案 4 :(得分:1)

我认为Lookaround适用于此处:&(?!#)

答案 5 :(得分:1)

您可以使用negative lookahead

&(?!#)
  

负前瞻构造是一对圆括号,开口括号后跟一个问号和一个感叹号。在前瞻中,我们有琐碎的正则表达式#。

答案 6 :(得分:1)

您需要执行look ahead

虽然

没有在java中测试过