我想提取一组字符串中"2022"之前的数字.I当前do

a= mystring.strip().split("2022")[0]

举例来说,当mystring=' 1020220519AX'时,得到a = '10'.然而

mystring.strip().split("2022")[0]

mystring=' 20220220519AX'返回a='202'时失败.因此,我希望代码拆分"2022"上的字符串,该字符串不是字符串中开头的非空白字符.

推荐答案

您可以告诉regex引擎您希望2022年之前的所有数字:

r'\d+(?=2022)'

.split()一样,正则表达式引擎在默认情况下是"贪婪的"-这里的"贪婪"意味着,一旦它可以接受指示它接受的内容,它就会接受该内容,并且不会try 其他选项,除非表达式的其余部分无法工作.

所以,在你的情况下,它可以找到第一个2020年的mystring.strip().split("2022")次分割,因为没有什么可以阻止它,这就是你必须处理的结果.

使用regex,您甚至可以告诉它您对2022不感兴趣,但对它之前的数字不感兴趣:\d+将匹配它能找到的一个数字字符串(贪婪),但(?=2022)部分说它后面必须跟一个文本2022才能匹配(这不是匹配的一部分,是"积极的前瞻").

使用类似以下内容:

import re

mystring = '   20220220519AX'
print(re.findall(r'\d+(?=2022)', mystring))

将显示所有连续的比赛.

请注意,对于像' 920220220519AX 12022'这样的字符串,它将找到['9202', '1'],而且仅此而已-它不会找到所有可能的匹配组合.首先,贪婪地遍历成功的字符串就是您得到的答案.

Python相关问答推荐

查找两极rame中组之间的所有差异

使用groupby Pandas的一些操作

Stacked bar chart from billrame

改进大型数据集的框架性能

字符串合并语法在哪里记录

启用/禁用shiny 的自动重新加载

如何在FastAPI中为我上传的json文件提供索引ID?

如何检测鼠标/键盘的空闲时间,而不是其他输入设备?

Gunicorn无法启动Flask应用,因为无法将应用解析为属性名或函数调用.'"'' "

通过追加列表以极向聚合

Pandas—堆栈多索引头,但不包括第一列

为什么t sns.barplot图例不显示所有值?'

Autocad使用pyautocad/comtypes将对象从一个图形复制到另一个图形

在Django中重命名我的表后,旧表中的项目不会被移动或删除

解决Geopandas和Altair中的正图和投影问题

TypeError:';Locator';对象无法在PlayWriter中使用.first()调用

Django更新视图未更新

将数据从一个单元格保存到Jupyter笔记本中的下一个单元格

极地数据帧:ROLING_SUM向前看

在Python中使用unittest中的补丁进行动态模拟