2017-10-21 49 views
0
分裂串起來後,他們

我有一個字符串,它呈現的格式如下:通配符的字符串,在Python

TEST 1 EXAMPLE 1 BLAHBLAH 

數字1可由任意數量和「BLAHBLAH」被替換任意字符串如:

TEST 2 EXAMPLE 99 HELLOWORLD 

我希望做的是第一,檢查字符串(我收到的「數據」)與TEST * EXAMPLE *開始,然後,把它分解開,所以我有一個新的字符串只有任何後續。以下是我已經試過:

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

看看重新模塊 – MegaIng

+0

什麼是問題? – arsho

回答

0

fnmatch?比賽只有一個單個字符。就你而言,如你所示,這些數字可以是多個數字,例如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

你舉的例子幾乎工程:

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

注意fnmatch.filter()期待一個列表作爲第一個參數,而不是字符串,它也返回一個列表。另外,?僅匹配單個字符,因此您需要使用*

我可能會使用一個正則表達式,但:

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)