如何在python中使用正则表达式拆分并保留拆分字?

时间:2016-08-10 09:05:29

标签: python regex string split

有没有办法在不丢失单词或字符的情况下使用拆分功能,用于拆分?

例如:

import re
x = '''\
1.
abcde.
2.
fgh 2.5 ijk.
3.
lmnop
    '''
print(x)

listByNum = re.split(r'\d\.\D', x)

print(listByNum) 

the output 我想将数字保留在列表中

另一个例子:

import re
x = '''\
I love stackoverflow. I love food.\nblah blah blah.
    '''
print(x)

listBySentences = re.split(r'\.', x)

print(listBySentences)

output for example 2

1 个答案:

答案 0 :(得分:2)

没有很好的文档记录,但您可以在问题表达式周围使用括号:

import re
x = '''\
1.
abcde.
2.
fgh 2.5 ijk.
3.
lmnop
    '''
print(x)

listByNum = re.split(r'(\d\.\D)', x)

print(listByNum) 
# ['', '1.\n', 'abcde.\n', '2.\n', 'fgh 2.5 ijk.\n', '3.\n', 'lmnop\n    ']

<小时/> 要在之后清理您的数据,您可以使用列表推导,如下所示:

listByNum = [num.strip() for num in re.split(r'(\d\.\D)', x) if num]
# ['1.', 'abcde.', '2.', 'fgh 2.5 ijk.', '3.', 'lmnop']

<小时/> 要保持分割元素中的数字,可以使用支持拆分空字符串的较新regex模块:

import regex as re
x = same string as above
listByNum = [num.strip() for num in re.split(r'(?V1)(?=\d\.\D)', x) if num]
# ['1.\nabcde.', '2.\nfgh 2.5 ijk.', '3.\nlmnop']