2017-02-12 14 views
0

私はこのようになりますテキストファイルを持っている:基本的に、私は最後の数である小数点を(持っている任意の数を一致させたい使用正規表現

15372185 ChocolateBiscuit 1.20 
13281038 AppleJuice 1.50 
26419633 TomatoSoup 2.10 
74283187 SpringRolls 0.90 

を各行私はこれを持っている最初と説明で8桁の番号を見つけるには:。

codes = re.findall(r'\d{8}', fread) 
details = re.findall(r'\b[A-Z][a-z]*[A-Z][a-z]*', fread) 

私は、小数点を持つすべての番号を見つけるために、同様のものを使用すると仮定し、私はちょうど私はそれを行うだろうか理解しません? 。

+0

うん、私は私のコードの別のバージョンを開発していますので。私はregexを使いたいと思っていました(私はそれが初めてで、より使い易い方法を理解したいからです)。 – Anya

答えて

0
with open('test.txt', 'r') as f: 
    file = f.read() 
re.findall(r'\b\d+\.\d+\b', file) 

結果:小数点以下の桁を囲む任意の数の

['1.20', '1.50', '2.10', '0.90'] 

検索は、境界線で囲みます。

あなたはまた、0.23のような数字をキャプチャする必要がある場合は、使用:

re.findall(r'[\d+]*\.\d+', file) 
+0

'.23'では動作しません。 – DyZ

+1

私はその数が0.23であると仮定しますか? – gregory

+0

なぜでしょうか? '.23'は完全に有効な実数です。 – DyZ

0

「テキストが

Dim fileText As String = "WhereEver.txt" 

に一致するように取得] 0.23「のような数字の受け入れなど、一致文字列を作成します。 "

Dim Reg As New Regex("(\d) (.+) (\d\.\d|\.\d)", RegexOptions.Multiline) 

'文字列内のすべての一致を取得します。

Dim regMatch As MatchCollection = Reg.Matches(fileText) 

「は、それぞれのグループを反復処理し、小数点数になります第三項目を取得。

For x = 0 To regMatch.Count - 1 
    DoWhatEverYouNeedToDoWithIt() 
    MsgBox(regMatch.Item(x).Groups.Item(3).Value) 
Next 

(2名であること、および3は小数点であること、1は8桁の数字である)あなたが望むどの値を返すためにFor[...]をwithing 3項目(1)を得ることができます。またはグループ全体でそれを得る。 私のコード例では、項目3が使用されています。

すべてのコード:(テスト済み&作品)

Dim fileText As String = "WhereEver.txt" 
Dim Reg As New Regex("(\d) (.+) (\d\.\d|\.\d)", RegexOptions.Multiline) 
Dim regMatch As MatchCollection = Reg.Matches(fileText) 
For x = 0 To regMatch.Count - 1 
    MsgBox(regMatch.Item(x).Groups.Item(3).Value) 
Next