Python re.scanner仅搜索字符串的开头

Python re.scanner仅搜索字符串的开头,python,regex,Python,Regex,我只是在寻找解析一系列行的方法时了解到,这些行的定义可能有点灵活。它看起来(不知道它意味着什么)就像它正是我想要的,但我有一个问题 我定义我的扫描仪: scanner = re.Scanner([ (r"([0-9]+(?:\ h|h))", lambda scanner,token:("HOURS", token)), ]) results, remainder = scanner.scan(line) 应该能够在提供的字符串中找到类似“1h”或“1h”的内容。但是,

我只是在寻找解析一系列行的方法时了解到,这些行的定义可能有点灵活。它看起来(不知道它意味着什么)就像它正是我想要的,但我有一个问题

我定义我的扫描仪:

scanner = re.Scanner([
    (r"([0-9]+(?:\ h|h))",    lambda scanner,token:("HOURS", token)),
    ])

results, remainder = scanner.scan(line)
应该能够在提供的字符串中找到类似“1h”或“1h”的内容。但是,这仅在小时位于字符串开头时有效

传入:

1 h words words words
bla 2 h words words
只有第一个条目被解析为一小时。由于无法在扫描仪上读取,我以为它可以在提供的字符串中的任何位置找到匹配项,但看起来它只是一个开始。它似乎也忽略了许多标准的正则表达式控件(比如()用于捕获,(?:)用于非捕获)


我应该找其他地方吗?使用一个看起来不会进入Python官方版本的类是不是一个坏主意?

Scanner.scan确实从行的开头开始,并且要求它的每一位都匹配某个模式。
scan
方法在n其中一个模式匹配,字符串的其余部分作为
余数返回

如果您想跳过任何不匹配的内容,只需将

(r'.', lambda scanner, token: None),
在模式/函数列表的末尾


Scanner
类在标准库中已经存在好几年了(),只是它还没有被记录(还没有?)

我想你不必担心它会很快消失。 即使它消失了,
Scanner
类的定义也很短,而且很简单


屈服

[('HOURS', '1 h'), ('HOURS', '2 h')]

Scanner.scan
确实从行的开头开始,并要求它的每一位都匹配某个模式。
scan
方法在第一个模式不匹配的点停止,字符串的其余部分作为
余数返回

如果您想跳过任何不匹配的内容,只需将

(r'.', lambda scanner, token: None),
在模式/函数列表的末尾


Scanner
类在标准库中已经存在好几年了(),只是它还没有被记录(还没有?)

我想你不必担心它会很快消失。 即使它消失了,
Scanner
类的定义也很短,而且很简单


屈服

[('HOURS', '1 h'), ('HOURS', '2 h')]

所以你需要一个“忽略”案例?它是标准的,但只是没有记录?我在阅读电子邮件线程,他们似乎对记录它不屑一顾,因为它没有完全实现?我认为它没有标准化的部分原因是允许
re
库的其他实现。只要在运行中完全替换
rere
库的其他实现。只要在运行中完全替换
re