繁体   English   中英

非重复正则表达式模式 - 负先行

[英]Non-repeating Regex Pattern - negative lookahead

我正在尝试使用 Java 中的正则表达式解析一个字符串,该字符串用于维度并仅返回它的必需部分。

理想的字符串是:数字 x 数字。

任何不是这种格式的都可以忽略并返回 null。

不过,一些输入的字符串包括以下内容。

  • 123x 132 平方英尺
  • 200 平方英尺 x 310 平方英尺
  • 404X931X1007X1140
  • .772 英亩
  • 680 和 3209.05
  • 0.772 交流电
  • 大约 255 x 640
  • 111'X301'
  • 2英亩

我目前的正则表达式解决方案是这样的

"(\\d+(?:\\.\\d*)?)[^\\dxX]*(?:[xX]| and |by|\\*)[^\\dxX]*(\\d+(?:\\.\\d*)?)"

然后我返回 match.group(1) + "x" + match.group(2)

我留下的问题是这些重复的,如“404X931X1007X1140”这也应该作为 null 返回,因为它的形状不规则,而是返回 404x931

我的问题是我如何确保不包括这些? 我的想法是对 append 进行负面前瞻,但它未能达到我的预期并出于某种原因返回 404x93。

first expression + "\\D*(?!([xX]| and |by|\\*)\\d+)"

万一其他人正在寻找这个。 我最终找到了一个有效的解决方案。 我会在最后使用 \b 但它不适用于 * 字符。 而后视中的 {0,30} 是因为 java 不会让我在后视中做无限量词。 虽然看起来有点乱。

(?<!\\d(?:[xX]| and |by|\\*).{0,30})\\b(\\d+(?:,\\d+)*(?:\\.\\d+)?)[^\\dxX]*(?:[xX]| and |by|\\*)[^\\dxX]*(\\d+(?:,\\d+)*(?:\\.\\d+)?)(?!.*(?:[xX]| and |by|\\*)\\D*\\d+)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM