Reputation: 33
I want to slice word from the end.Suppose, I have some line with case sensitives(Upper/lower case)
Abc Defg Hijk Lmn
Xyz Lmn jkf gkjhg
I want to slice them as like below :
Abc Defg Hijk
Abc Defg
Abc
Then I need to take each sliced line in variables so that I can use them to search in some text file & return the whole text:
Suppose I have text :
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
Any suggestions please.Thanks!
Upvotes: 2
Views: 1005
Reputation: 29093
You can also use the following code:
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'
I have read your update and think that Roman's solution feats your needs. You can update your code the following way:
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
And if you need to get a full text:
resultText = '\n'.join(res)
Upvotes: 1
Reputation: 45634
To create a list from string:
a="Abc Defg Hijk Lmn".split()
look at it:
['Abc', 'Defg', 'Hijk', 'Lmn']
slice it, to remove last entry:
a[:-1]
This gives:
['Abc', 'Defg', 'Hijk']
To join it into a string again:
" ".join(a[:-1])
gives:
'Abc Defg Hijk'
Now, repeat that in a loop...
Upvotes: 0
Reputation: 29717
Use rsplit
function:
>>> s = 'Abc Defg Hijk Lmn'
>>> s.rsplit(' ', 1)[0]
'Abc Defg Hijk'
>>> s = s.rsplit(' ', 1)[0]
>>> s.rsplit(' ', 1)[0]
'Abc Defg'
and so on...
Another variant:
>>> words = s.split()
>>> [' '.join(words[:i]) for i in range(len(words), 0, -1)]
['Abc Defg Hijk Lmn', 'Abc Defg Hijk', 'Abc Defg', 'Abc']
Upvotes: 5