如何匹配以特定字符开始和结束的文本行?

如何匹配以特定字符开始和结束的文本行?

我有一个文本文件,其中包含如下项目列表。

leptop
pencil
group
leptop
book
gruop
buk
grop
laftop
pensil
laptop
pancil
laptop bag
bok

由此,我想设计一个正则表达式模式,它将匹配以字母“l”开头并以“op”结尾的行。

这是我尝试过的:

a = re.search("^l.*op",line).group(0)

但我得到了:

leptop
leptop
laftop
laptop
laptop # this one I don't want because it's coming from the word "laptop bag"

有什么办法可以得到如下所示的效果吗?

[leptop,leptop,laftop,laptop]
[pencil,pensil,pancil]
[group,gruop,grop]
[book,buk,bok]
[laptop bag]

答案1

您需要正则表达式的行尾锚点$

import re
a = re.search("^l.*op$",line).group(0)

op$op从字符串末尾或者行尾换行符之前进行匹配。

答案2

您实际上并不需要正则表达式。string.startswith函数string.endswith将完成这项工作。

$ python3 -c 'import sys
with open(sys.argv[1]) as f:
    for line in f:
        if line.startswith("l") and line.strip().endswith("op"):
            print(line, end="")' file
leptop
leptop
laftop
laptop

相关内容