我试图在下面找到以"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]
匹配所有字母也是不对的。它实际上意味着在A
和z
之间匹配 Unicode 表中的任何字符。正如您在这里看到的,这包括例如[
,^
和。如果您只需要 ASCII 字母,请改用
[A-Za-z]
。如果要使用所有 Unicode 单词字符(任何受支持的语言和下划线的字母和数字(,请使用w
。
要玩弄正则表达式,例如 https://regex101.com/