如何通过识别令牌的结构来使用re模块拆分字符串



我知道,当我想在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']

相关内容

  • 没有找到相关文章

最新更新