2016-06-21 3 views
1

У меня длинная строка (28 МБ) обычных предложений. Я хочу удалить все слова, полностью заполненные заглавными буквами (например, TNT, USA, OMG).Python -Удалить заглавные слова из длинной строки

Так от Сентанса:

Jump over TNT in There. 

Я хотел бы получить:

Jump over in There. 

Есть ли способ, как сделать это без разделения текста в список и itereate? Можно ли использовать регулярное выражение так или иначе?

+1

Почему вы не хотите разделить строку? –

+0

@jmetz Я ничего не пробовал, потому что решение, которое я знаю, является неоптимальным (и тривиальным). Я видел документацию 're', но для меня это сложно - я всегда стараюсь выяснить, как добиться того, чего хочу. – matousc

+0

@ TinoA. По моему опыту, когда я разделяю длинную строку и перебираю ее, это занимает больше времени, чем использование 're' (но, возможно, я ошибаюсь) – matousc

ответ

2

Вы можете использовать набор прописных букв [A-Z] захваченное с границей слова \b:

import re 

line = 'Jump over TNT in There NOW' 

m = re.sub(r'\b[A-Z]+\b', '', line) 
#'Jump over in There ' 
1

Я хотел бы сделать что-то вроде этого:

import string 

def onlyUpper(word): 
    for c in word: 
     if not c.isupper(): 
      return False 
    return True 

s = "Jump over TNT in There." 
for char in string.punctuation: 
    s = s.replace(char, ' ') 

words = s.split() 
good_words = [] 

for w in words: 
    if not onlyUpper(w): 
     good_words.append(w) 

result = "" 
for w in good_words: 
    result = result + w + " " 

print result 
2

Используйте модуль re,

import re 

line = 'Jump over TNT in There.' 
new_line = re.sub(r'[A-Z]+(?![a-z])', '', line) 

print(new_line) 
# Output 
Jump over in There. 
Смежные вопросы