Нарезка строк в питоне - PullRequest
2 голосов
/ 08 июля 2011

Я хочу нарезать слово с конца. Предположим, у меня есть строка с чувствительностью к регистру (верхний / нижний регистр)

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

Любые предложения, пожалуйста. Спасибо!

Ответы [ 3 ]

5 голосов
/ 08 июля 2011

Использование 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']
1 голос
/ 08 июля 2011

Вы также можете использовать следующий код:

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

ИЛИ:

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'

Я прочитал ваше обновление и считаю, что решение Романа отвечает вашим потребностям.Вы можете обновить свой код следующим образом:

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 голосов
/ 08 июля 2011

Чтобы создать список из строки:

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

посмотрите на него:

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

нарежьте его, чтобы удалить последнюю запись:

a[:-1]

Thisдает:

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

Чтобы снова объединить его в строку:

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

дает:

'Abc Defg Hijk'

Теперь повторите это в цикле ...

...