我必须逐行读取文本文件并提取每行的一部分。如果我正在阅读的行是预期的格式,我有一个工作代码,但情况并非总是这样。文件中存在错误,即一些丢失的信息或字符。所以我想跳过这些错误的路线。为此,我想使用regular expression
模块。我定义了我需要的正则表达式。可以说,reg_exp_string
将与我读过的行匹配。我想要一个完整的匹配,我不想搜索文本的某些部分。如果是完全匹配则返回true,否则返回false。想一想,我试过re.match()
并返回一个对象。我无法理解。使用它的正确方法是什么?如果字符串的某些部分与正则表达式匹配,它总是返回一个对象。我只想要一个完整的匹配并得到一个布尔答案。我怎么能这样做?
答案 0 :(得分:1)
匹配对象的文档是a little further down。
答案 1 :(得分:1)
如documentation中所述,$
匹配字符串的结尾。您可以修改正则表达式以在最后包含$
。例如:
match_this = "abc12a" #expression you would like to match
dont_match_this = "abc12a9" #expression that returns partial matches from re.match
旧的正则表达式将匹配match_this
和dont_match_this
:
old_reg_expr = "[a-z]+\d[a-z]+"
新的正则表达式包含$
,如果字符串在表达式中匹配的最后一个元素之后结束,则仅返回匹配项:
new_reg_expr = "[a-z]+\d[a-z]+$"
或者,您可以保留旧的正则表达式,只需检查匹配的结束位置是否等于字符串的结尾:
>>> m = re.match("[a-z]+\d[a-z]+", "abc12a9")
>>> m.end() == m.endpos
False
答案 2 :(得分:-1)
re.match()
应该返回一个匹配对象,除非没有匹配,在这种情况下它会返回None
:
答案 3 :(得分:-1)
如http://docs.python.org/library/re.html中所述,match()将返回MatchObject,找到匹配,否则返回None。
所以,简单地说:
for line in ... :
m = your_regexp.match(line)
if m:
process(line)