查找以 'ing' 结尾的单词的两个正则表达式模式之间的区别

Difference between two regex patterns to find words ending with 'ing'

我想在下面找到以 'ing' 结尾的单词 句子 = "Playing outdoor games when its raining outside is always fun!"

现在这不是我的问题本身,因为我找到了必要的正则表达式模式 - (r'\b([A-z]+ing)\b').

问题是我无法理解为什么上面的方法有效,但我在下面尝试的方法却不行:

re.findall('([A-z]+ing)$',"Playing outdoor games when it's raining outside is always fun!")

Returns 空列表,即使下面没有

re.findall('([A-z]+ing)$','amazing')

Returns太棒了

所以这个模式可以匹配以 'ing' 结尾的单个单词,但不能匹配句子中的单词?为什么?

我发现更奇怪的是: re.findall('\b([A-z]+ing)\b',"Playing outdoor games when it's raining outside is always fun!") returns 没有匹配项(空列表)。唯一的区别是不使用原始字符串表示法 (r)

我认为 'r' 符号仅在我们想要转义反斜杠时才需要。所以在那种情况下: Pattern1 - '\b([A-z]+ing)\b' 应该匹配播放、下雨等而不是 模式 2- r'\b([A-z]+ing)\b' 我到底理解错了什么?我搜索了很多 Stack Overflow 答案和官方 Python regex 文档,现在我比刚开始时更加困惑,特别是关于 'r' 的使用。

$ 匹配行尾或整个文本的结尾(取决于标志设置,此处:仅文本结尾)。在 "ing" 之后立即使用它强制 "ing" 必须出现在末尾。

原始字符串表示法让转义字符如 \b 进入底层函数(此处:findall)以进一步处理(此处:作为单词边界的特殊正则表达式代码)。

没有原始字符串表示法,\b 是 BACKSPACE 控制代码(十六进制 0x08)。此字符由正则表达式引擎处理为自身的简单匹配。

[A-z]匹配所有字母也不对。其实就是匹配Az之间Unicodetable中的任意一个字符。如您所见 here 这包括例如[^\。如果您只需要 ASCII 字母,请改用 [A-Za-z]。如果您想要所有 Unicode 单词字符(任何支持的语言中的字母和数字以及下划线),请使用 \w.

要使用正则表达式,例如https://regex101.com/