-1

我有以下字符串

ALEXANDRITE OVAL 5.1x7.9 GIA# 6167482443 FINE w:1.16
ALEXANDRITE OVAL 4x6 FINE w:1.16

我想匹配 5.1 和 7.9 以及 4 和 6,而不是 w:1.16 或 w:1.16 或 6167482443。到目前为止,我设法想出了这些:

匹配 w:1.16 w:1.16

([w][:]\d\.?\d*|[w][:]\s?\d\.?\d*) 

匹配其他数字:

\d+\.?\d{,3}

我有点期待这不是因为 {,3} 而返回长数字序列,但它仍然如此。

我的问题是: 1. 如何将两种模式结合起来,排除一种模式并返回另一种模式?2.如何排除长序列的数字?为什么现在不排除?

谢谢!

4

3 回答 3

2

您可以简单地使用下面的正则表达式。

\b(\d+(?:\.\d+)?)x(\d+(?:\.\d+)?)

演示

解释:

\b                       the boundary between a word char (\w) and
                         something that is not a word char
(                        group and capture to \1:
  \d+                      digits (0-9) (1 or more times)
  (?:                      group, but do not capture (optional):
    \.                       '.'
    \d+                      digits (0-9) (1 or more times)
  )?                       end of grouping
)                        end of \1
x                        'x'
(                        group and capture to \2:
  \d+                      digits (0-9) (1 or more times)
  (?:                      group, but do not capture (optional):
    \.                       '.'
    \d+                      digits (0-9) (1 or more times)
  )?                       end of grouping
)                        end of \2
于 2014-10-19T07:27:51.913 回答
1
([\d\.])+x([\d\.])+

火柴

5.1x7.9

4x6
于 2014-10-19T07:29:11.550 回答
0
(\d+(?:\.\d+)?)(?=x)|(?<=x)(\d+(?:\.\d+)?)

你可以试试这个。看演示。

http://regex101.com/r/wQ1oW3/6

2)要忽略必须\b\d{1,3}\b用来指定边界的长字符串。

http://regex101.com/r/wQ1oW3/7

否则长字符串的一部分将匹配。

于 2014-10-19T07:29:24.790 回答