我必须逐行读取文本文件并提取每行的某些部分。如果我正在阅读的行是预期的格式,我有一个工作代码,但情况并非总是如此。文件中有错误,即缺少一些信息或字符。所以我想跳过这些错误的行。为此,我想利用regular expression
模块。我定义了我需要的正则表达式。可以说,reg_exp_string
将与我阅读的行相匹配。我想要一个完整的匹配,我不想搜索文本的某些部分。如果是完全匹配返回true,否则返回false。想法是,我试过了re.match()
它返回一个对象。我想不通。正确的使用方法是什么?如果字符串的某些部分与正则表达式匹配,它总是返回一个对象。我只想要一个完整的匹配并得到一个布尔答案。我怎样才能做到这一点?
问问题
174 次
4 回答
1
匹配对象的文档稍微往下一点。
于 2012-05-16T23:42:24.147 回答
1
如文档中所述,$
匹配字符串的结尾。您可以修改正则表达式以包含$
在末尾。例子:
match_this = "abc12a" #expression you would like to match
dont_match_this = "abc12a9" #expression that returns partial matches from re.match
旧的正则表达式将同时匹配match_this
and 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
于 2012-05-17T00:37:11.543 回答
-1
re.match()
应该返回一个匹配对象,除非没有匹配,在这种情况下它返回None
:
于 2012-05-16T23:42:31.953 回答
-1
如http://docs.python.org/library/re.html中所述,如果找到匹配项,match() 将返回 MatchObject,否则返回 None。
所以,简单地说:
for line in ... :
m = your_regexp.match(line)
if m:
process(line)
于 2012-05-16T23:44:09.790 回答