在Python中使用RegEx查找完全匹配项

k5ifujac  于 2022-12-27  发布在  Python
关注(0)|答案(2)|浏览(136)

我正在文本中搜索确切的课程代码。代码如下所示

MAT1051
CMP1401*
PHY1001*
MAT1041*
ENG1003*

所以3或4个大写字母后面跟着4个数字。
我只想要那些不以"*"符号结尾的。
我试过了

course_code = re.compile('[A-Z]{4}[0-9]{4}|[A-Z]{3}[0-9]{4}')

这可能是最糟糕的方法之一,但有点工作,因为我可以得到上面列出的所有课程。问题是,我不希望这3个课程代码以"*"结束(失败的课程有一个 * 旁边的代码)被列入名单。
我试着在表达式的末尾添加\w或$,无论添加哪一个,代码都返回一个空列表。

sr4lhrrt

sr4lhrrt1#

如果我没有理解错您的需求,您需要以下模式:

^[A-Z]{3,4}[0-9]{4}$

这里假设你要在多行模式下使用正则表达式搜索存储在Python字符串中的整个文本,参见这个演示:

inp = """MAT1051
CMP1401*
PHY1001*
MAT1041*
ENG1003*"""

matches = re.findall(r'^[A-Z]{3,4}[0-9]{4}$', inp, flags=re.M)
print(matches)  # ['MAT1051']
sh7euo9m

sh7euo9m2#

import re
# Add a "$" at the end of the re.
# It requires the match to end after the 4 digits.
course_code = re.compile('[A-Z]{4}[0-9]{4}$|[A-Z]{3}[0-9]{4}$')

# No match here
m = re.match(course_code, "MAT1051*")
print(m)
# This matches
m = re.match(course_code, "MAT1051")
print(m)

相关问题