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

split正如其他人所说,使用一个额外的步骤非常简单:

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 回答
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

有些人在遇到问题时会想,“我知道,我会使用正则表达式。” 现在他们有两个问题。” Jamie Zawinski

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 回答