0

これは、Pythonで解析しようとしている文字列です

    s1="One : Two : Three : Four  Value  : Five  Value  : Six  Value : Seven  Value : Eight  Value :"

上記の文字列を解析して s1 が「:」なしで次のようになるように使用できる re 関数を教えてもらえますか?

One

Two

Three

Four Value

Five Value 

Six Value

Seven Value

Eight Value 

次のコードを使用して文字列を分割した後、strip、lstrip、および rstrip を使用しようとしましたが、必要な形式が得られません

    res1=s1.split(' : ')

更新:ご回答ありがとうございますが、使用するかどうかにかかわらず、得られる出力は次のようになります

1->

    for index in s1:
      print index

また....

2->

    pprint(s1)

出力:

n

e

:

T

w

o

:

T

時間

r

e

e

:

o

あなた

r

a

l

あなた

e

:

v

e

a

l

あなた

e

:

S

バツ

a

l

あなた

e

:

S

e

v

e

n

a

l

あなた

e

:

g

時間

t

a

l

あなた

e

:

4

5 に答える 5

6
'\n'.join(a.strip() for a in s1.split(':'))

戻り値

One
Two
Three
Four  Value
Five  Value
Six  Value
Seven  Value
Eight  Value

余分な空行が必要な場合:

'\n\n'.join(a.strip() for a in s1.split(':'))
于 2013-03-01T09:58:02.803 に答える
1

リストの理解アプローチ(多様性の理由と、最後に空白の項目を残さない唯一の答えであるため)。次のいずれか:

filter(lambda x: x != '', [item.strip() for item in s1.split(':')])
[item.strip() for item in s1.split(':') if item.strip() != '']
[item for item in map(lambda x: x.strip(), s1.split(':')) if item != '']
于 2013-03-01T09:58:56.497 に答える
0

1 /文字列が必要な場合:

split()から:

res1 = '\n'.join(res1)

その他の解決策:

res1 = s1.replace(' : ', '\n')

2 /リストが必要な場合:

res1 = [item.strip() for item in s1.split(':')]

[...]は文字列を含むリストを返します。詳細については、 http://docs.python.org/2/tutorial/datastructures.htmlの「リスト内包表記」を確認してください。

于 2013-03-01T10:04:20.670 に答える
0
 import re
 re.split(r'\s*:\s*', s1)

そして、多くの分割を行う必要がある場合は、もう少し効率的に...

 import re
 split_re = re.compile(r'\s*:\s*')
 split_re.split(s1)

そして、これも機能します。速度テストを行うのは興味深いでしょう。

 [a.strip() for a in s1.split(':')]

これらはすべて、各単語を含む配列を取得します。各単語の間に空白行がある複数の行を含む文字列が必要な場合は、'\n\n'.join(foo)for each を使用してその文字列を取得できます。しかし、これも機能します:

 import re
 split_re = re.compile(r'\s*:\s*')
 res1 = split_re.subn('\n\n', s1)[0]

テストでは次のことが示されています。

 res1 = '\n\n'.join(a.strip() for a in s1.split(':'))

は実際には最速であり、確かに最も美しいです。そして、最後の ':' の後ろに何もない空白行を避けたい場合は、次のようにします。

 res1 = '\n\n'.join(a.strip() for a in s1.split(':')).strip()
于 2013-03-01T09:56:21.807 に答える
0

最も簡単な方法は次のとおりres1 = ' '.join(s1.split(':'))です。単一の行文字列が必要な場合は、次を試してください。res1 = '\n'.join(s1.split(':'))

于 2013-03-01T11:25:45.737 に答える