在Python中使用.find查找第一个非数字字符

3

我有一个包含ABC 12345,还有ABC 98765.或者ABC 55555<的字符串。

为了查找ABC并识别后面的数字序列,我使用以下代码:

index = page.find('ABC',index)
t1 = page.find(' ',index+1)
t2 = page.find(' ',t1+4)

这给我返回了结果12345,但没有9876555555

我该如何修改第三行以查找空格和其他字符,例如.<

我尝试过:

import re

t2 = re.search("\d", page,t1+4)

但是这个语法是有误的。
1个回答

6
使用正则表达式查找紧随文本“ABC”之后的数字,加上可选的空格:
match = re.search(r'ABC\s*(\d+)', page)
if match:
    print match.group(1)

无论数字后面跟着什么,这都是有效的:

>>> re.search(r'ABC\s*(\d+)', 'ABC 98765.').group(1)
'98765'
>>> re.search(r'ABC\s*(\d+)', 'ABC 55555<').group(1)
'55555'

如果你需要找到多个匹配项,使用findall()代替:
matches = re.findall(r'ABC\s*(\d+)', page)

该功能会给你列出所有跟在文字 ABC 后面的数字组合:

>>> re.findall(r'ABC\s*(\d+)', 'Some text with ABC 98765. There is some other text too, with ABC 55555<!')
['98765', '55555']

谢谢您提供的解决方案。从新手的角度来看,它更简单,代码也更好。但是相比我的解决方案(结果错误),它需要更长的时间,我能加速吗? - lejonet
@lejonet8:抱歉,什么需要更长时间?正则表达式吗? - Martijn Pieters
是的,使用正则表达式运行脚本。 - lejonet
1
你的输入有多大?我们可以将\s*变成非贪婪模式,用\s*?替换它,或者甚至只使用ABC (\d+)来匹配一个空格。 - Martijn Pieters
1
85 kb。切换到(\d+)解决了这些性能问题。再次感谢您的帮助,非常感激。 - lejonet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接