2011-07-08 60 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