我想提取一组字符串中"2022"之前的数字.I当前do
a= mystring.strip().split("2022")[0]
举例来说,当mystring=' 1020220519AX'
时,得到a = '10'
.然而
mystring.strip().split("2022")[0]
当mystring=' 20220220519AX'
返回a='202'
时失败.因此,我希望代码拆分"2022"上的字符串,该字符串不是字符串中开头的非空白字符.
我想提取一组字符串中"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']
,而且仅此而已-它不会找到所有可能的匹配组合.首先,贪婪地遍历成功的字符串就是您得到的答案.