3

ぐるぐる回しましたが、探しているものが見つかりませんでした....

基本的に、たくさんのアスタリスクが散らばった文字列があります。

例:red blue green * hello* pink orange 4pgp42g4jg42 * world* violet black

私がやろうとしているのは、文字列を分割して、「hello」と「world」を抽出し、最終的に for ステートメントを使用してリストとして出力できるようにすることです。私が扱っている文字列は長く、取り出したいスライスの数が決まっているとは限りません。

誰でもこれで私を助けてくれますか?

ありがとうございました

4

7 に答える 7

7

私はそれを期待します:

re.findall(r'\*([^*]+)\*',string)

トリックを行うでしょう。基本的に、この正規表現は () を探し、( '*')\*以外のすべてに一致し、次に別の.'*'([^*]+)'*'

于 2012-08-15T18:55:27.713 に答える
3

優れたre提案の代わりとして:

split「アスタリスク間」と「アスタリスク間でない」のセクションを区切るために使用します。

>>> msg = "red blue green * hello* pink orange 4pgp42g4jg42 * world* violet black"
>>> msg.split()
['red blue green ', ' hello', ' pink orange 4pgp42g4jg42 ', ' world', ' violet black']

次に、配列スライスを使用して、2 番目から始めて、1 つおきのセクションを取得します。

>>>msg.split("*")[1::2]
[' hello', ' world']
于 2012-08-15T18:59:22.650 に答える
2

reモジュールを試したことがありますか?これは、非常に複雑な一致を可能にする正規表現と呼ばれる構文を使用します (こちらのドキュメントを参照してください)。あなたの場合、次のようなことを試すことができます:

import re

# Store your string
my_str = 'red blue green * hello* pink orange 4pgp42g4jg42 * world* violet black'

# Find matches
match = re.findall(r'\*([^\*]*)\*', my_str)

# Print everything
print match

# Iterate
for item in match:
    print item
于 2012-08-15T18:56:10.463 に答える
1

.split('*') を使用して、他のすべての要素を取得できます。

例えば:

my_string = 'this is a *test* of my code that *I* have written'
split_string = my_string.split('*')
words_between = [split_string[i] for i in range(1, len(split_string), 2)]
于 2012-08-15T18:59:03.477 に答える
1

ここでは、正規表現はやり過ぎのようです。私はただ使用します:

my_str = 'red blue green * hello* pink orange 4pgp42g4jg42 * world* violet black'
broken_up = my_str.split('*')

そして、終わりが欲しくない場合は、そうしてください

broken_up[1:-1]

編集:あなたが本当に探しているものを理解したと思います. 技術的には「ピンク オレンジ 4pgp42g4jg42」もアスタリスクの間にあるため、問題が発生します。これでもいけると思いますが。

my_str = 'red blue green * hello* pink orange 4pgp42g4jg42 * world* violet black'
broken_up = my_str.split('*')
broken_up = [broken_up[i] for i in range(1, len(broken_up), 2)]

スペースを取り除きたい場合は、次のように .strip() を使用してください

broken_up = [broken_up[i].strip() for i in range(1, len(broken_up), 2)]
于 2012-08-15T19:00:49.653 に答える
1

これを試してください:

from re import findall

sstring = "red blue green * hello* pink orange 4pgp42g4jg42 * world*"

result = findall('\*.*?\*', sstring)
print r

これにより、次のことが得られます。

['* hello*', '* world*']
于 2012-08-15T19:05:52.213 に答える
0

re.split を使用してこれを行い、これを文字列のリストに分割します。

import re

my_string = "red blue green * hello* pink orange 4pgp42g4jg42 * world* violet black"

all_split_up = re.split('\*', my_string)

これを行うときは、次のように入力します。

for item in all_split_up:
    print item

が得られます:

red blue green 
 hello
 pink orange 4pgp42g4jg42 
 world
 violet black

re.findall の代わりに re.split を使用すると、正規表現パターンで非キャプチャ グループを指定することについて心配する必要がなくなります。「回答」ボタンで少し遅れていますが、これは最も単純な正規表現の回答だと思います。

于 2012-08-15T19:00:26.787 に答える