2

我正在尝试拆分由多个空格分隔的字符串,即:

    string1 = "abcd    efgh   a. abcd   b efgh"
    print re.findall(r"[\w.]+") 

正如预期的那样,结果是:

    ['abcd', 'efgh', 'a.', 'abcd', 'b', 'efgh']

但是,我想将“a”分组。和“abcd”进入同一组,“b”和“efgh”进入同一组。所以我想要的结果看起来像:

    ['abcd', 'efgh', 'a. abcd', 'b efgh']

我目前的方法是创建两种类型的表达。第一个处理不带空格的正则表达式,即'abcd' 和'efgh'。第二个处理具有单个空格的那些。即“一个”。+'abcd'。

所以如果 r'[\w]+ 可以处理第一种类型,而 r'[\w]+ [\w]+ 可以处理第二种类型。但我不知道如何使用“|”将它们组合成同一个表达式。

与往常一样,欢迎任何其他方法。感谢您的宝贵时间!

4

2 回答 2

8
result = [s.strip() for s in string1.split('  ') if s.strip()]

即拆分两个空格并从结果中删除无关空格(使用条带)。

于 2013-09-08T08:28:31.310 回答
4

如果你想使用re.findall,你可以使用这个表达式:

>>> string1 = "abcd    efgh   a. abcd   b efgh"
>>> print re.findall(r"\S+(?:\s\S+)*", string1)
['abcd', 'efgh', 'a. abcd', 'b efgh']

(?:\S+(?:\s\S+)*)如果存在,则多次查找非空格字符,后跟一个空格和更多非空格字符,因此这也有效:

>>> string1 = "abcd    efgh   a. abcd   b efgh ijkl"
>>> print re.findall(r"\S+(?:\s\S+)*", string1)
['abcd', 'efgh', 'a. abcd', 'b efgh ijkl']

否则,使用 split 超过 2 个空格会更简单:

>>> string1 = "abcd    efgh   a. abcd   b efgh ijkl"
>>> print re.split(r"\s{2,}", string1)
['abcd', 'efgh', 'a. abcd', 'b efgh ijkl']
于 2013-09-08T08:59:55.497 回答