正则表达式匹配一段时间,但如果两边都有一段时间则没有(Java)

时间:2015-09-13 01:48:07

标签: java regex

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

 Fine by me... leave!    FAIL

 Okay.. You win.     SUCCEED

 Okay. SUCCEED //Note here, the period is the last char in the string.

我在想:

 [^\\.*]\\.       

但这是错误的,可能根本没有朝正确的方向发展。我希望这个问题能帮助其他人处于同样的境地。

感谢。

3 个答案:

答案 0 :(得分:3)

你需要以负面的方式包围点:

(?<![.])[.](?![.])

我更喜欢[.]而不是\\.,因为:

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

答案 1 :(得分:0)

正则表达式仍将匹配任何不在其他期间之前的期间。

[^\.]\.[^\.]照顾目标时期的双方。

编辑:Java没有Python之类的原始字符串,因此您需要完全转义:[^.]\\.[^.]|^\\.[^.]|[^.]\\.$

答案 2 :(得分:0)

您可以使用负面向前看并向后看或替代正则表达式:

String regex = "(^\\.[^\\.]|[^\\.]\\.[^\\.]|[^\\.]\\.$)";

第一个替代检查字符串的开始^(如果它可以以点开头),第二个查找内部的任何点,第三个查找字符串末尾的点{{1 }}