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

时间:2016-09-17 18:27:01

标签: regex regular-language

我想要匹配,以下情况:

1。获取两者之间或者只有一个x存在结束

示例:

| 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}}。

对案例1或案例2有效的两个正则表达式的任何建议吗?

感谢您的回复!

2 个答案:

答案 0 :(得分:1)

将评论转化为答案 对于第一种情况,您可以使用:

[\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*替换为<{1>}。

答案 1 :(得分:1)

  

我尝试与以下正则表达式x\s?((\d+(?:,\d+)?))\s?匹配,但是   我仍然只得到案件的最后部分。

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

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

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

如果您希望将其用于案例#1,则附加量词{2}

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

Live demo

如果您希望案例#2追加量词{3}

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

Live demo

在两种情况下都应设置

m修饰符