2017-07-03 5 views
2

は、私が持っているテキストの一部です:、一つのことをキャプチャし、または別の、またはその両方

G1 13.00 
G1 3.00 
     0.00 
     27C 

私は英数文字のコードで一つのグループをキャプチャするために正規表現を使用しようとしています(G1または27C)または浮動小数点(xx.xx)である別のグループ、またはその両方を使用します。この例では

が、私はこの特定のリターンを望む:

(G1,13.00) 
(G1,3.00) 
(,0.00) 
(27C,) 

これは私が持っている最も近いソリューションです:

\(?:(\w+) +(\d+\.\d+))|(?: +(\d+\.\d+))|(?: +(\w+))\ 

この解決策の問題は、最後の2行の値がキャプチャされていることです3番目と4番目のグループ:

(G1,13.00,,) 
(G1,3.00,,) 
(,,0.00,) 
(,,,27C) 

解決方法はありますか?

私は近いこの質問を発見した:In a regular expression, match one thing or another, or bothそれが答えかキャプチャから一致としないように。

+0

を参照してください:あなたは空の試合をしたいない場合、これは試します(\ | + \ d +)+(\ d + \ d \)+ \ w +)) ' –

答えて

1

同じキャプチャグループで一致させるには、同じパターンが必要です。

これは常に2つのグループが返されます:

(\w+)? *\b(\d+\.\d+)? 

demo

EDITを参照してください:

(?=\w)(\w+(?=$|\s))? *\b(\d+\.\d+)? 

は、PyPIでdemo

+0

ありがとうございますが、それは0文字と一致し、私はあまりにも多くのマッチを与えます。 – GregOizo

+0

@ GregOizo答えを編集しました。正規表現が簡素化できるかどうかを確認してみましょう – horcrux

+0

まあ、それは大丈夫だと思います – horcrux

関連する問題