匹配长 x 宽 x 高的中间和末端

Match middle and end of length x width x height

我正在尝试匹配,以下情况:

1. 如果只有一个 x 存在,则获取 end

示例:

| Matches/Cases     | Result |
|-------------------|--------|
| 200 x 90 x 14     | 90     |
| 90x200            | 200    |
| 200 x 90x20       | 90     |
| 60,4 x46,5 x 42,6 | 46,5   |
| 90x190,9          | 190,9  |

2.如果有两个x就得到最后一个,如果只有一个就没有结果

示例:

| Matches/Cases     | Result |
|-------------------|--------|
| 200 x 90 x 14     | 14     |
| 90x200            | -      |
| 200 x 90x20       | 20     |
| 60,4 x46,5 x 42,6 | 42,6   |
| 90x190,9          | -      |

我坚持要得到一个具体案例!我尝试匹配以下正则表达式 x\s?((\d+(?:,\d+)?))\s?,但我仍然只得到最后一部分情况,例如 90x200 我得到 200,但 200 x 90 x 14 我得到 90 x 14.

有两个适用于案例 1 或案例 2 的正则表达式的建议吗?

感谢您的回复!

只是把评论变成答案。
对于第一种情况,您可以使用:

[\d,]+\h*x\h*([\d,]+)(?:\h*x*[\d,]+)?

参见 a demo on regex101.com


第二个:

[\d,]+\h*x\h*[\d,]+\h*x\h*([\d,]+)

另一个demo on regex101.com.


提示:如果不支持,请将 \h 替换为 [ ]*\s*

I tried to match with the following regex x\s?((\d+(?:,\d+)?))\s?, but I still get only the last part of the cases.

实际上,通过您自己的 RegEx,您将捕获后跟 x 的所有数字或浮点数。所以这不仅是最后一部分,还有所有类似的事件。

解决方案(主要正则表达式):

(?: *(\d+(?:,\d+)?) *(?:x|$))

如果您想要案例 #1,请附加量词 {2}

(?: *(\d+(?:,\d+)?) *(?:x|$)){2}

Live demo

如果你想为案例 #2 添加量词 {3}

(?: *(\d+(?:,\d+)?) *(?:x|$)){3}

Live demo

m 两种情况下都应设置修饰符