使用正则表达式拆分多个空格的字符串。

时间:2013-09-08 08:22:28

标签: python regex findall

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

    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'。第二个是处理单个空间的那个。即'a。' +'abcd'。

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

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分: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']

否则,使用拆分超过2个空格要简单得多:

>>> string1 = "abcd    efgh   a. abcd   b efgh ijkl"
>>> print re.split(r"\s{2,}", string1)
['abcd', 'efgh', 'a. abcd', 'b efgh ijkl']