0

这是我试图在 python 中解析的字符串

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

有人可以告诉我一个 re 函数,我可以用它来解析上面的字符串,这样 s1 就变成如下没有任何 ':'

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

w

H

r

e

e

F

r

一种

l

e

F

一世

v

e

一种

l

e

小号

一世

X

一种

l

e

小号

e

v

e

n

一种

l

e

一世

G

H

一种

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
 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)来获取该字符串。但这也有效:

 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

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

最简单的方法是:res1 = ' '.join(s1.split(':'))如果你想要一个单行字符串,否则你应该尝试:res1 = '\n'.join(s1.split(':'))

于 2013-03-01T11:25:45.737 回答