2016-09-17 12 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.を取得し、一つだけならば何の結果が存在しない

例:

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

私は1つの特定のケースを得ることで立ち往生!私は次の正規表現x\s?((\d+(?:,\d+)?))\s?とマッチしようとしましたが、私はまだ90x200のようなケースの最後の部分だけを取得します。200を取得しますが、200 x 90 x 14の場合、90 x 14を取得します。

ケース1またはケース2で動作する2つの正規表現の提案はありますか?

返信いただきありがとうございます。

+0

これらの2つの要件で、右に設定する必要がありますか?なぜ同じ正規表現が '200 x 90 x 14'の** 90 **と同じ文字列の** 14 **とマッチするのでしょうか?さらに、どの言語を使用していますか? – Jan

+0

最初の[** '[\ d、] + \ h * x \ h *([\ d、] +)(?:\ h * x * [\ d、] +)? (https://regex101.com/r/uC3iN7/1) – Jan

+0

2番目の場合:[** '[\ 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アペンドのためにそれをしたい場合は、数量詞{2}

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

Live demo

を追加定量器{3}

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

Live demo

m修飾子は、どちらの場合も

+0

ありがとうございました!私は正規表現エンジンとしてExcelを使用しています - http://analystcave.com/excel-regex-tutorial/したがって、マッチは機能しません。エクセルはグループにしか一致しないためです。どのようにケースを正確に一致させるための提案? – mrquad

+0

あなたが提供したリンクは、グループのキャプチャをサポートしていることを示しています。したがって、キャプチャされたグループでも機能する機能が必要です。 @mrquad – revo

+0

私の問題は、f.exのように間違った文字列を返すことです。 '200 x 90 x 14'、' 90 'ではなく '200 x 90 x'を返します。理由は何ですか? – 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を交換してください。

関連する問題