2017-10-21 55 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)