我知道,当我想在Python中使用re模块和split((方法时,我需要提供我想打断字符串的模式(即,在空白处,我会使用类似pattern = re.compile('\s+')
的模式(。
但对于更复杂的情况,我有一个字符串,其模式如下:
'letters<space>letters<space>numbers<space>...repeat...'
我应该如何编写regex以在每次重复时进行拆分?我试图使用与字符串完全匹配的表达式的否定,直到重复,就像这里建议的那样,但Python抛出了一个错误。有什么建议吗?
给出示例字符串:
text = 'aaaaa 12345 aaaaa bbbbb 12345 bbbbb ccccc 12345 ccccc'
相反,您使用re.split()
,也许您可以使用re.findall()
:
re.findall(r'w+s+w+s+w+', text)
# output: ['aaaaa 12345 aaaaa', 'bbbbb 12345 bbbbb', 'ccccc 12345 ccccc']
如果你无论如何都想使用re.split()
,你可以把它放在一个组中,然后使用生成器来清理空间:
splitted = re.split(r'(w+s+w+s+w+)', text)
#output: ['', 'aaaaa 12345 aaaaa', ' ', 'bbbbb 12345 bbbbb', ' ', 'ccccc 12345 ccccc', '']
[ele for ele in splitted if ele.strip()]
#output: ['aaaaa 12345 aaaaa', 'bbbbb 12345 bbbbb', 'ccccc 12345 ccccc']
如果我正确理解了这个问题,这可能是一种拆分字符串的方法:
In [298]: s
Out[298]: 'lettersone letterstwo 12 lettersthree lettersfour 34'
In [299]: re.findall(r'(?:w+ w+ d+)', s)
Out[299]: ['lettersone letterstwo 12', 'lettersthree lettersfour 34']