正则表达式匹配一个句号,但如果两边都有句号则不匹配(Java)

Hat*_*end 3 java regex

我正在寻找一个与句点字符匹配的正则表达式,仅当该句点周围的字符都不是句点时。

 Fine by me... leave!    FAIL

 Okay.. You win.     SUCCEED

 Okay. SUCCEED //Note here, the period is the last char in the string.
Run Code Online (Sandbox Code Playgroud)

我在想:

 [^\\.*]\\.       
Run Code Online (Sandbox Code Playgroud)

但那是错误的,而且可能根本就没有朝着正确的方向发展。我希望这个问题也能帮助处于同样情况的其他人。

谢谢。

Boh*_*ian 5

您需要将点包裹在负环中:

(?<![.])[.](?![.])
Run Code Online (Sandbox Code Playgroud)

我喜欢[.]\\.,这是因为:

  1. 更容易阅读 - Java 文字中已经有太多反斜杠了
  2. [.] 看起来有点像《星球大战™》中的 X 翼战斗机

  • 那么你的第二个原因是否适用于任何其他角色?:) 我在想,如果我想匹配“书”这个词,也许我应该使用像 `b[o][o]k` 这样的正则表达式,因为 `[o]` 看起来有点像......好吧,它看起来像一个滚筒洗衣机,一点也不酷,所以不要介意。 (2认同)