python - 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'
但这不会删除前面的数字,很复杂,还会拆分原始文本并在中间加上空格。我想剪切文本开始的字符串并且不想真正触摸原始文本部分,例如有时单词之间可能有两个空格,但应该按原样保留。
解决方案
尝试使用更复杂的正则表达式,例如:
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]
推荐阅读
- linux - sed在linux中为字符串添加前缀的用法
- java - 安装后运行时Java“handshake_failure异常”,但从intelliJ运行时不会
- python - 如何在 Celery 中实现已经编写好的 python 脚本
- html - 只刷新一次页面
- python - + 的 mypy 操作数类型(“str”和“None”)
- html - 从 Django 生成的表单中删除不需要的 th、td 和 tr 标签
- google-cloud-platform - 如何在 gke kubernetes runner 上增加 gitlab 作业并发?
- neo4j - RedisGraph - UNWIND 批量查询
- r - 使用iconv转换utf8格式导致报错
- java - 图像不会从 apache 从主机名重定向到 cname 加载