2017-10-21 26 views
0

でそれらの後に文字列を分割、私は次の形式を取り、文字列を持っている:文字列内のワイルドカードとPython

TEST 1 EXAMPLE 1 BLAHBLAH 

数1は、任意の文字列で、任意の数と「BLAHBLAH」に置き換えることができます例えば:(私は「データ」として受け取っています)文字列がTEST * EXAMPLE *で始まり、その後、それを離れて分割するので、私は新しい文字列を持っている場合

TEST 2 EXAMPLE 99 HELLOWORLD 

私は何をしたいのは、まず、チェックされます次のものだけのここで私が試したものです:

import fnmatch 
filtered = fnmatch.filter(data, 'TEST ? EXAMPLE ?') 
if filtered != "": 
    str = filtered.split("EXAMPLE ",1)[1] 
+1

再モジュール – MegaIng

+0

を見てください何が問題なのですか? – arsho

答えて

0

fnmatchさん?試合のみ1つの文字を。あなたのケースでは、あなたが示したように、数字は複数の数字にすることができます。 99ですので、代わりに*を使用してください。

import fnmatch 
data = "TEST 2 EXAMPLE 99 HELLOWORLD" 
if fnmatch.fnmatch(data, 'TEST * EXAMPLE *'): 
    // do what you want with the data 

Reference

しかし、私は代わりに正規表現を使用することをお勧めし、次のように:次は私のために働い

import re 
m = re.compile("^TEST \d+ EXAMPLE \d+.*") 
data = "TEST 2 EXAMPLE 99 HELLOWORLD TRY TRY" 
if m.search(data): 
    print(' '.join(data.split(' ')[4:])) // or whatever you want to do 

私は正規表現はより強力なツールだと思います。あなたはそれについてもっと読むことができますhere

0

あなたの例はほとんど動作します:fnmatch.filter()は最初の引数としてリストではなく、文字列を期待している、そしてそれはまた、リストを返すこと

import fnmatch 
data = 'TEST 1 EXAMPLE 1 BLAHBLAH' 
matches = fnmatch.fnmatchcase(data, 'TEST * EXAMPLE *') 
if matches: 
    rest = data.split('EXAMPLE ', 1)[1] 
    print(rest) 

注意を。また、?は1文字にのみ一致するので、代わりに*を使用する必要があります。

私はおそらくかかわらず、正規表現を使用したい:

import re 
data = 'TEST 1 EXAMPLE 1 BLAHBLAH' 
match = re.search(r'^TEST \d+ EXAMPLE (\d+ \w+)$', data) 
if match: 
    rest = match.groups()[0] 
    print(rest) 
関連する問題