我有一个文本文件,其中包含如下项目列表。
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