在Python中匹配行首的字符串

2024-10-04 05:33:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在文本文件中每一行的开头搜索特定的模式。在

以下是文本文件的内容:

module abc ( A, B, C, NSUP, PSUP, SEL );
input NSUP;
input PSUP;
input SEL;
inout A;
inout B;
output C;
//sample text input pins
//sample text output pins

我希望输出为

^{pr2}$

我尝试了下面的代码,但它输出一个空列表:

fh=open("VamsModel","r")
contents=fh.read()
inoutPortList=re.compile(r'^(input|output|inout)\s+(\w+)')
matches = inoutPortList.finditer(contents)

for match in matches:
    print(match.group(2))

如果我从中删除“^”重新编译模式然后它工作,但它不会只在开始时寻找模式。在

inoutPortList=re.compile(r'(input|output|inout)\s+(\w+)')

上面的regex还将从我不想要的文本文件中输出最后两行(如下所示):

//sample text input pins
//sample text output pins

你知道为什么我使用“^”时正则表达式不起作用吗??在


Tags: sampletextreinputoutputcontents模式文本文件
3条回答

在整个缓冲区上使用^,您将在缓冲区的开始处查找表达式。在

要在每行开头查找表达式,请使用多行标志:

inoutPortList=re.compile(r'^(input|output|inout)\s+(\w+)',flags=re.M)

输出:

^{pr2}$

旁白:对于regex模块,始终将标志作为关键字参数传递:flags=re.M而不仅仅是re.M。它与re.compile一起工作,但不能与re.sub一起工作,因为“count”参数排在第一位,这会产生奇怪的问题。在

如果知道要查找的字符串,可以使用startswith代替正则表达式

if line.startswith(("input", "output", "inout")):
    print(line.split(" ", 1)[1])

你需要使用re.多行(re.M简写)标志,指示^在行首匹配,而不是在字符串的开头:

inoutPortList=re.compile(r'^(input|output|inout)\s+(\w+)', re.M)

相关问题 更多 >