python正则表达式模块

时间:2012-05-16 23:39:54

标签: python regex

我必须逐行读取文本文件并提取每行的一部分。如果我正在阅读的行是预期的格式,我有一个工作代码,但情况并非总是这样。文件中存在错误,即一些丢失的信息或字符。所以我想跳过这些错误的路线。为此,我想使用regular expression模块。我定义了我需要的正则表达式。可以说,reg_exp_string将与我读过的行匹配。我想要一个完整的匹配,我不想搜索文本的某些部分。如果是完全匹配则返回true,否则返回false。想一想,我试过re.match()并返回一个对象。我无法理解。使用它的正确方法是什么?如果字符串的某些部分与正则表达式匹配,它总是返回一个对象。我只想要一个完整的匹配并得到一个布尔答案。我怎么能这样做?

4 个答案:

答案 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_thisdont_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

http://docs.python.org/library/re.html#re.match

答案 3 :(得分:-1)

http://docs.python.org/library/re.html中所述,match()将返回MatchObject,找到匹配,否则返回None。

所以,简单地说:

for line in ... :
    m = your_regexp.match(line)
    if m:
        process(line)