【问题标题】:How to find a character in a string which is not matching the regex pattern如何在与正则表达式模式不匹配的字符串中查找字符
【发布时间】:2019-06-05 19:24:38
【问题描述】:

有一个正则表达式,我需要找到与正则表达式不匹配的字符。然后将字符中的“”替换掉。在JAVA中如何实现呢?

Pattern : ^((?![\|\=\;])[\p{L}\p{N}\p{M}\p{P}\p{Zs}])+$
Sample Text: HAIRCUT $42 PER PERSON
Required output: HAIRCUT 42 PER PERSON

【问题讨论】:

  • 可能,s.replaceAll("\\p{S}+", "")

标签: java regex


【解决方案1】:

只是否定你已经拥有的东西。

查找(?!(?![|=;])[\p{L}\p{N}\p{M}\p{P}\p{Zs}])[\S\s]
替换nothing

https://regex101.com/r/Sn3DuL/1

 (?!
      (?! [|=;] )
      [\p{L}\p{N}\p{M}\p{P}\p{Zs}] 
 )
 [\S\s]

【讨论】:

  • 在测试代码时,对于示例数据HAIRCUT + 43,收到以下错误。java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0 +。已根据以下链接解决此问题。 stackoverflow.com/questions/40246231/…
  • 正则表达式是(?!(?![|=;])[\p{L}\p{N}\p{M}\p{P}\p{Zs}])[\S\s] 里面没有+。因此不会抛出与正则表达式相关的异常。
【解决方案2】:

您可以替换匹配正则表达式的字符。

String myString = "HAIRCUT $42 PER PERSON";
myString = myString.replaceAll("^((?![\|\=\;])[\p{L}\p{N}\p{M}\p{P}\p{Zs}])+$", "");

结果:

HAIRCUT 42 PER PERSON

【讨论】:

  • 你是怎么得到这个结果的? Your code does not even compile.
  • @WiktorStribiżew 只有一个错误的正则表达式,所以结果不正确。我从示例中给出了正则表达式。代码确实编译...你想要截图吗?
  • 不,请在 ideone.com 上进行演示。
  • 所以,你把反斜杠加倍了,这就是代码编译的原因。看到你的答案,反斜杠没有加倍。然后,结果为HAIRCUT $42 PER PERSON。为什么你在答案中写出结果是HAIRCUT 42 PER PERSON
  • 您ideone中的代码与您答案中的代码不同(请参阅@WiktorStribiżew 的第一条评论),结果也与您答案中的结果不同。反正结果是错的。
猜你喜欢
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
相关资源
最近更新 更多