查找以 '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]
匹配所有字母也不对。其实就是匹配A
和z
之间Unicodetable中的任意一个字符。如您所见 here 这包括例如[
、^
和 \
。如果您只需要 ASCII 字母,请改用 [A-Za-z]
。如果您想要所有 Unicode 单词字符(任何支持的语言中的字母和数字以及下划线),请使用 \w
.
要使用正则表达式,例如https://regex101.com/
我想在下面找到以 '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]
匹配所有字母也不对。其实就是匹配A
和z
之间Unicodetable中的任意一个字符。如您所见 here 这包括例如[
、^
和 \
。如果您只需要 ASCII 字母,请改用 [A-Za-z]
。如果您想要所有 Unicode 单词字符(任何支持的语言中的字母和数字以及下划线),请使用 \w
.
要使用正则表达式,例如https://regex101.com/