2016-06-21 24 views
1

長い文章(28MB)の通常の文章があります。 TNT、USA、OMGなど大文字で書かれたすべての単語を削除したい。Python - 長い文字列から大文字の単語を削除する

だから、一文に含まから:

Jump over TNT in There. 

私が取得したいと思います:

Jump over in There. 

は、どのような方法は、リストとitereateにテキストを分割せずにそれを行う方法、ありますか?何とか正規表現を使用することは可能ですか?

+1

なぜ文字列を分割したくないのですか? –

+0

@jmetz私が知っている解決策は最適ではない(そして些細なので)何も試していません。私は「再」の文書を見ましたが、それは私のために複雑です - 私はいつも私が望むものを達成する方法を見つけるのに苦労します。 @TinoA。 – matousc

+0

私の経験では、長い文字列を分割してそれを反復すると、 '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. 
関連する問題