2016-09-17 77 views
1

我試圖匹配,在下列情況下:匹配中間和長度×寬度×高度的端

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或案例2有效的兩個正則表達式的任何建議?

我很感謝你的回覆!

+0

這兩個要求,正確設置?爲什麼相同的正則表達式匹配** 90 **在'200 x 90 x 14'和** 14 **在同一個字符串中?另外,您使用的是哪種語言? – Jan

+0

第一個:[**'[\ d,] + \ h * x \ h *([\ d,] +)(?:\ h * x * [\ d,] +)?'**] (https://regex101.com/r/uC3iN7/1) – Jan

+0

對於第二個:[**'[\ d,] + \ h * x \ h * [\ d,] + \ h * x \ h *([\ d,] +)'**](https://regex101.com/r/aW2lN7/1) – Jan

回答

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修改應在這兩種情況下

+0

非常感謝您的回答!我正在使用excel作爲正則表達式引擎 - http://analystcave.com/excel-regex-tutorial/。因此,比賽不起作用,因爲excel只能匹配而不能獲得組。任何建議如何完全匹配的情況? – mrquad

+0

您提供的鏈接聲明它支持捕獲組。所以應該有一個功能來處理捕獲的組。 @mrquad – revo

+0

我的問題是我得到了錯誤的字符串,像f.ex. '200 x 90 x 14',我回到'200 x 90 x'而不是'90'。任何建議爲什麼? – mrquad

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


提示:如果不支持它要麼 [ ]*\s*更換 \h