首页 > 解决方案 > Python regex 使用 re.findall( r'( )', string) 选择性地选择数字

问题描述

我只需要提取字符串末尾的文本部分和子编号,来自:

'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor?::enim',
'9. Ut enim ad minima veniam, quis nostrum exercitationem.2',
'. . . . . 9.1 dolore magnam aliquam quaerat',
'. . . . . 9.1 ed quia consequuntur magni.1',
'. . . . . 9.2 Quis autem vel eum iure reprehenderit.2'

像这样:

'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor?::enim',
'Ut enim ad minima veniam, quis nostrum exercitationem.2',
'dolore magnam aliquam quaerat',
'ed quia consequuntur magni.1',
'Quis autem vel eum iure reprehenderit.2'

是否可以在 python 正则表达式中使用单个 re.findall(r'( )', item) 来做到这一点?似乎我无法将字符串开头的数字与字符串末尾的数字“分开”。

例如,我尝试使用以下代码:

string ='. . . . . 9.2 Quis autem vel eum iure reprehenderit.2' 
string = re.findall(r'([a-öA-Ö0-9/:._]+)',string)
string = ' '.join( list(filter(lambda x: x != '.', string)))

这给出了:

'9.2 Quis autem vel eum iure reprehenderit.2'

但这不会删除前面的数字,很复杂,还会拆分原始文本并在中间加上空格。我想剪切文本开始的字符串并且不想真正触摸原始文本部分,例如有时单词之间可能有两个空格,但应该按原样保留。

标签: pythonregex

解决方案


尝试使用更复杂的正则表达式,例如:

import re

expression = re.compile(r'(.*?[0-9].+? )*(.+)')

# this is a list of tuples, and you are always interested in the last match
results = expression.findall('<string>')[-1][-1]

推荐阅读