Java模式正则表达式,用于查找不以特定子字符串结尾的数字

时间:2019-08-01 13:52:16

标签: java regex

我正在尝试使用模式和匹配器逻辑来捕获Java中一行的子字符串。对于当前应用程序,我需要删除一行的子字符串。因此,我想捕获整个子字符串,该子字符串的数字不应以为其他目的保留的指定3位数字结尾。我也不能简单地从行中剥离一定数量的硬编码字符,因此需要一个正则表达式。为了简化问题,正则表达式应只捕获不以770结尾的9位数字。

这应该是结果:

233456770 --> NO HIT
454683870 --> HIT
459987579 --> HIT

我尝试了以下解决方案,剥离所有以0结尾的数字

\d{6}[^9][^9][^0]

我还尝试了一个后向搜索,这导致子字符串太长或太短,因为缺少3位数字或太多了

\d{6}(?!990)

\d{9}(?!990)

那么,如何使用Java模式语言检测并捕获一个不以指定的子字符串结尾的数字,同时又将整个检测到的数字(不删除所检查的最后三位数字)保留在结果子字符串中?

2 个答案:

答案 0 :(得分:2)

您可以使用

(?<!\d)\d{9}(?!\d)(?<!770)

请参见this demo

详细信息

  • (?<!\d)-当前位置左侧不允许有数字
  • \d{9}-九位数字
  • (?!\d)-当前位置右边不允许有数字
  • (?<!770)-当前位置的左侧不允许770

Java字符串文字:

String regex = "(?<!\\d)\\d{9}(?!\\d)(?<!770)";

答案 1 :(得分:0)

如果可以的话,我会避免使用regexex,因为它们很难调试并且性能较差。

如果可以使用纯Java:

num !=null && num.length() == 9 && num.length.endsWith("770")