我正在尝试拆分由多个空格分隔的字符串 即:
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] + 可以处理第二种类型。但我不知道如何使用'|'将它们组合成相同的表达式。
与往常一样,欢迎任何其他方法。谢谢你的时间!
答案 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']