2

文字列内のものを見つけようとしています-それらはすべて数字の前にあります。たとえば、次のようになります。

"Diablo Lord Of Destruction 9.2"

これは、次のようなファイルからのインデックスです。file[2] = "Diablo Lord Of Destruction 9.2"

テキストのみを選択し、数字とそれらの数字の前の空白を除外するコードを作成するにはどうすればよいですか (以下を参照)。

"Diablo Lord Of Destruction"

次のようなことを行うことで、これを簡単に実行できることを理解しています。

contents = file[2]
print contents[0:-2]

値が変化するため、さまざまなサイズの数値とさまざまな長さの空白を処理できる、より堅牢なソリューションが必要です。

4

6 に答える 6

7

これにより、文字列から数字とピリオドが削除されます。

import re
>>> filtered = re.sub('[0-9.]*','',"Diablo Lord Of Destruction 9.2  111" )
>>> filtered
'Diablo Lord Of Destruction   '
>>> filtered.strip()           # you might want to get rid of the trailing space too!
'Diablo Lord Of Destruction'
于 2012-07-10T17:56:50.567 に答える
3

数字の前に常にスペースがある場合は、文字列を分割できます。例えば:

contents = file[2].split() # Gives a list split by whitespace
contents.pop() # Dump the number
finalStr = ' '.join(contents)

テストの実行から:

>>> test = "Diablo Lord Of Destruction 9.2"
>>> contents = test.split()
>>> contents
['Diablo', 'Lord', 'Of', 'Destruction', '9.2']
>>> contents.pop()
'9.2'
>>> finalStr = ' '.join(contents)
>>> finalStr
'Diablo Lord Of Destruction
于 2012-07-10T17:58:20.163 に答える
3

これは、正規表現に最適な仕事です。具体的には、次のコードを使用して、数字の前にあるすべてのテキストを抽出できます。

import re
s = "Diablo Lord Of Destruction 9.2"
print 'Text: ', re.match('([^0-9]+)',s).group(1)

正規表現をマスターするのは少し面倒ですが、努力する価値は十分にあります。

于 2012-07-10T18:00:13.780 に答える
3

正規表現sub()メソッドを利用できます。

string 内のパターンの重複しない左端のオカレンスを置換 repl で置き換えて得られた文字列を返します。パターンが見つからない場合、string は変更されずに返されます。repl は文字列または関数です。文字列の場合、その中のバックスラッシュ エスケープが処理されます。

>>> import re
>>> re.sub('[0-9.]*', '', 'Diablo Lord of Destruction 9.2')[:-1]
'Diablo Lord of Destruction'
>>> re.sub('[\d.]*', '', 'Diablo Lord of Destruction 9.2')[:-1]
'Diablo Lord of Destruction'

上記のコードは、[0-9.] または [\d.] のすべての数字の出現を検出し、それらを '' に置き換えます。さらに、スペースだった最後の文字をトリムします。

于 2012-07-10T18:04:39.203 に答える
2

どうですか...

filter(lambda ch: not ch.isdigit(), "Diablo Lord Of Destruction 9.2")
于 2012-07-10T17:57:32.070 に答える
1

最初の数字に到達するまですべてのテキストを取得するには:

import re

s = "Diablo Lord Of Destruction 9.2"
print(re.match(r'\D*', s).group(0))
于 2012-07-10T18:13:37.810 に答える