Python 正则表达式模块



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

如文档中所述,$匹配字符串的末尾。您可以修改正则表达式以在末尾包含$。例:

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

匹配对象的文档稍低一些。

re.match()应该返回一个匹配对象,除非没有匹配,在这种情况下,它返回None

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

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

所以,简单地说:

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

最新更新