python只对几个可变长度分隔符中的第一个进行拆分

2024-09-27 09:34:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用re来分割基于多个可变长度分隔符的字符串。你知道吗

我试过:

s = 'PPPPMMMMMPPPPPFFFMFFFFAA--AAA'
re.split('(P*)|(A*)|(-*)', s)

得到:

['', 'PPPP', None, 'MMMMM', 'PPPPP', None, 'FFFMFFFFAA--AAA']

但是,我想对所有组进行完全拆分,如下所示:

['', 'PPPP', None, 'MMMMM', 'PPPPP', None, 'FFFMFFFF', 'AA', '--', 'AAA']

我不介意None条目。我希望对所有字符块进行完全拆分,包括P*A*-*。用re这可能吗?你知道吗


Tags: 字符串renone条目字符aasplit分隔符
2条回答
>>> re.split('(P+)|(A+)|(-+)', s)
['', 'PPPP', None, None, 'MMMMM', 'PPPPP', None, None, 'FFFMFFFF', None, 'AA', None, '', None, None, ' ', '', None, 'AAA', None, '']

如果使用给定的正则表达式运行程序,则会得到:

/usr/lib/python3.5/re.py:203: FutureWarning: split() requires a non-empty pattern match.
  return _compile(pattern, flags).split(string, maxsplit)

因此,这意味着您的正则表达式应始终至少包含一个字符:空字符串不应与正则表达式匹配。你知道吗

(P+|A+|-+)上拆分如何:

>>> re.split('(P+|A+|-+)', s)
['', 'PPPP', 'MMMMM', 'PPPPP', 'FFFMFFFF', 'AA', '', ' ', '', 'AAA', '']

如果不需要空字符串'',可以使用列表理解过滤掉它们:

>>> [x for x in re.split('(P+|A+|-+)', s) if x]
['PPPP', 'MMMMM', 'PPPPP', 'FFFMFFFF', 'AA', ' ', 'AAA']

这也会删除None项。但是,如果需要None部分(这些是未执行的分支的捕获组),可以使用(P+)|(A+)|(-+)

>>> re.split('(P+)|(A+)|(-+)', s)
['', 'PPPP', None, None, 'MMMMM', 'PPPPP', None, None, 'FFFMFFFF', None, 'AA', None, '', None, None, ' ', '', None, 'AAA', None, '']

相关问题 更多 >

    热门问题