0

私は次の文字列データを持っています:

data = "*****''[[dogs and cats]]''/n"

Pythonで正規表現を使用して文字列を抽出したいと思います。すべてのデータは二重引用符で囲まれています""。次を取得できるように使用するワイルドカードは何ですか。

print data.groups(1)
print data.groups(2)
print data.groups(3)

'dogs'
'and'
'cats'

編集:これまでのところ、私はこれの長い行を持っています

  test = re.search("\\S*****''[[(.+) (.+) (.+)\\S]]''", "*****''[[dogs and cats]]''\n") 
  print test.group(1) 
4

3 に答える 3

1

探しているものを正確に知ることは困難ですが、英数字以外の文字で囲まれた1つ以上のスペースで区切られた単語を解析する正規表現を探していると仮定します。

data = "*****''[[dogs and cats]]''/n"

# this pulls out the 'dogs and cats' substring
interior = re.match(r'\W*([\w ]*)\W*', data).group(1)

words = interior.split()

print words
# => ['dogs', 'and', 'cats']

ただし、これにより、要件について多くの仮定が行われます。必要なものによっては、正規表現が最適なツールではない場合があります。

于 2012-11-13T05:47:12.460 に答える
1

問題に直面したときに、「わかっている、正規表現を使用する」と考える人もいます。今、彼らには2つの問題があります。」ジェイミー・ザウィンスキー

data = "*****''[[dogs and cats]]''/n"
start = data.find('[')+2
end = data.find(']')
answer = data[start:end].split()

print answer[0]
print answer[1]
print answer[2]
于 2012-11-13T05:47:24.553 に答える
1

split他の人が言ったように、これは1つの追加のステップを使用してかなり簡単です:

data = "***rubbish**''[[dogs and cats]]''**more rubbish***"
words = re.findall('\[\[(.+?)\]\]', data)[0].split() # 'dogs', 'and', 'cats'

単一の式も可能ですが、かなり混乱しているように見えます。

rr = r'''
    (?x)
    (\w+)
    (?=
        (?:
            (?!\[\[)
            .
        )*?
        \]\]
    )
'''
words = re.findall(rr, data) # 'dogs', 'and', 'cats'
于 2012-11-13T09:05:57.593 に答える