2011-07-08 62 views
2

我想从end.Suppose切片字,我有情况下敏感者一些线(/小写)字符切片

Abc Defg Hijk Lmn 
Xyz Lmn jkf gkjhg 

欲切片他们如象下面这样:

Abc Defg Hijk 
Abc Defg 
Abc 

然后我需要在切断线的变量,这样我可以用它们在一些文本文件中搜索&返回全文:

假设我有文字:

Akggf Abc Defg Hijk fgff jfkjgk djkfkgf  
Akgff Abc fgff jfkjgk djkfkgf  
Akggef Abc Defg fgff jfkjgk djkfkgf 
gjshgs gskk Xyz Lmn jkf 
fgsgdf fkgksk Xyz Lmn 

任何建议please.Thanks!谢谢!

+0

那么这些选择是该行的第3个,第2个和第1个单词? –

+0

@丹D.:是的。但是我需要在全球范围内完成这个过程,并将每条切片线放在可变的区域中。 –

回答

1

您也可以使用下面的代码:

dataStr = 'Abc Defg Hijk Lmn' 
for word in reversed(dataStr.split()): 
    # do something with word 

OR:

dataStr = 'Abc Defg Hijk Lmn' 
removeLastWord = lambda line: ' '.join([word for word in line.split()[:-1]]) 
dataStr = removeLastWord(dataStr) 
>>> 'Abc Defg Hijk' 
dataStr = removeLastWord(dataStr) 
>>> 'Abc Defg' 
dataStr = removeLastWord(dataStr) 
>>> 'Abc' 

我已阅读您的更新并认为Roman的解决方案能够满足您的需求。您可以更新您的代码如下方式:

searchTxt = """Abc Defg Hijk Lmn 
Xyz Lmn jkf gkjhg""" 

data = """kggf **Abc Defg Hijk** fgff jfkjgk djkfkgf 
Akggf **Abc ** fgff jfkjgk djkfkgf 
Akggf **Abc Defg fgff jfkjgk djkfkgf 
gjshgs gskk **Xyz Lmn jkf** 
fgsgdf fkgksk **Xyz Lmn**""" 

searchWords = [] 
for line in (line for line in searchTxt.split('\n') if line.strip()): 
    words = line.split() 
    searchWords.extend([' '.join(words[:i]) for i in xrange(len(words), 0, -1)]) 

searchWords = sorted(searchWords, key=len, reverse=True)# to look first for the longest string match 

res = set([line for sword in searchWords for line in data.split('\n') if sword in line]) 

# OR 

res = [] 
for line in data.split('\n'): 
    for sword in searchWords: 
     if sword in line: 
      res.append(line) 
      break 

如果你需要得到一个完整的文本:

resultText = '\n'.join(res) 
+0

非常感谢! –

+1

)欢迎您))如果您喜欢我的解决方案 - 请投票))) –

+0

@ Artsiom Rudzenka:您可以请一点儿精心。我的意思是如何获得所需的切片行许多dataStr.Thanks! –

5

使用rsplit功能:

>>> s = 'Abc Defg Hijk Lmn' 
>>> s.rsplit(' ', 1)[0] 
'Abc Defg Hijk' 
>>> s = s.rsplit(' ', 1)[0] 
>>> s.rsplit(' ', 1)[0] 
'Abc Defg' 

等等...

另一个变化:

>>> words = s.split() 
>>> [' '.join(words[:i]) for i in range(len(words), 0, -1)] 
['Abc Defg Hijk Lmn', 'Abc Defg Hijk', 'Abc Defg', 'Abc'] 
+0

请循环使用! –

+0

'[''.join(words [:i])for i in range(len(words),0,-1)]' 喜欢它!非常感谢。 –

0

要创建的字符串列表:

a="Abc Defg Hijk Lmn".split() 

看看吧:

['Abc', 'Defg', 'Hijk', 'Lmn'] 

片吧,除去最后一封n尝试:

a[:-1] 

这给:

['Abc', 'Defg', 'Hijk'] 

重新加入它变成一个字符串:

" ".join(a[:-1]) 

给出:

'Abc Defg Hijk' 

现在,重复,在一个循环...

+0

请注意,当s =“时,s!=”“.join(s.split())'s'==”“.join(s.split(”“))”两个空格“ – phant0m