查找以 'ing' 结尾的单词的两种正则表达式模式之间的差异



我试图在下面找到以"ing"结尾的单词 句子="外面下雨的时候玩户外游戏总是很有趣!

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

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

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

返回空列表,即使以下内容没有

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

回报惊人

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

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

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

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

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

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

使用[A-z]匹配所有字母也是不对的。它实际上意味着在Az之间匹配 Unicode 表中的任何字符。正如您在这里看到的,这包括例如[^。如果您只需要 ASCII 字母,请改用[A-Za-z]。如果要使用所有 Unicode 单词字符(任何受支持的语言和下划线的字母和数字(,请使用w

要玩弄正则表达式,例如 https://regex101.com/

最新更新