我的正则表达式在python中没有完全匹配

我的正则表达式在python中没有完全匹配,python,regex,python-3.x,Python,Regex,Python 3.x,这是我的密码 import re l=["chap","chap11","chapa","chapb","chapc","chap3","chap2","chapf","chap4","chap55","chapf","chap33","chap54","chapgk"] for i in l: matchobj=re.match(r'chap[0-9]',i,re.M|re.I) if matchobj: print(i) 正如我提到的第[0-9]章。。因此

这是我的密码

import re

l=["chap","chap11","chapa","chapb","chapc","chap3","chap2","chapf","chap4","chap55","chapf","chap33","chap54","chapgk"]
for i in l:
    matchobj=re.match(r'chap[0-9]',i,re.M|re.I)
    if matchobj:
        print(i)
正如我提到的第[0-9]章。。因此,它应该只包含那些在chap之后只跟在一个整数后面的字符串

所以我应该得到以下输出

第三章 第二章 第四章

但我得到以下输出。。。 第十一章 第三章 第二章 第四章 第五十五章 第三十三章 第54章与字符串开头的模式匹配。例如,将字符串
'$'
的结尾或单词边界
'\b'
附加到您的模式中:

matchobj=re.match(r'chap\d$',i,re.M|re.I)
# \d (digit) is shortcut for [0-9]
从上的
re.match

如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的MatchObject实例

匹配字符串开头的模式。例如,将字符串
'$'
的结尾或单词边界
'\b'
附加到您的模式中:

matchobj=re.match(r'chap\d$',i,re.M|re.I)
# \d (digit) is shortcut for [0-9]
从上的
re.match

如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的MatchObject实例


您应该在正则表达式的末尾添加一个美元符号。美元($)表示字符串的结尾,为了便于将来参考,克拉(^)表示开始

import re

l=["chap","chap11","chapa","chapb","chapc","chap3","chap2","chapf","chap4","chap55","chapf","chap33","chap54","chapgk"]
for i in l:
    matchobj=re.match(r'chap[0-9]$',i,re.M|re.I)
    if matchobj:
        print(i)
输出

chap3
chap2
chap4

您应该在正则表达式的末尾添加一个美元符号。美元($)表示字符串的结尾,为了便于将来参考,克拉(^)表示开始

import re

l=["chap","chap11","chapa","chapb","chapc","chap3","chap2","chapf","chap4","chap55","chapf","chap33","chap54","chapgk"]
for i in l:
    matchobj=re.match(r'chap[0-9]$',i,re.M|re.I)
    if matchobj:
        print(i)
输出

chap3
chap2
chap4

添加一个单词边界
chap[0-9]\b
添加一个单词边界
chap[0-9]\b
您可以使用
\d
@Niitaku简化数字范围,因为它缩短了模式并且通常没有语义差异。但是,
\d
可以匹配比
[0-9]更多的字符。
您可以通过使用
\d
@Niitaku来简化数字范围。我添加了这一点,因为它缩短了模式并且通常没有语义差异。但是,
\d
可以匹配比
[0-9]
更多的字符,但是它应该在chap之后只匹配1个整数…为什么不匹配?但是它应该在chap之后只匹配1个整数…为什么不匹配?