Big.Bang
Big.Bang

Reputation: 33

String slicing in python

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

Answers (3)

Artsiom Rudzenka
Artsiom Rudzenka

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

Fredrik Pihl
Fredrik Pihl

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

Roman Bodnarchuk
Roman Bodnarchuk

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

Related Questions