我想在文本文件中的每一行的开头搜索特定模式。
这是文本文件的内容:
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
我想要输出为
NSUP
PSUP
SEL
A
B
C
我尝试了下面的代码,但它打印了一个空列表作为输出:
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))
如果我从 re.compile 模式中删除“^”,那么它可以工作,但它不会只在开始时寻找模式。
inoutPortList=re.compile(r'(input|output|inout)\s+(\w+)')
上面的正则表达式还会输出我不想要的文本文件中的最后两行(如下所示):
//sample text input pins
//sample text output pins
知道为什么当我使用“^”时我的正则表达式不起作用吗??
请您参考如下方法:
在整个缓冲区上使用 ^,您将在缓冲区的开头查找表达式。
要在每行的开头查找表达式,请使用多行标志:
inoutPortList=re.compile(r'^(input|output|inout)\s+(\w+)',flags=re.M)
输出:
NSUP
PSUP
SEL
A
B
C
另外:对于正则表达式模块,始终将标志作为关键字参数传递:flags=re.M 而不仅仅是 re.M。它适用于 re.compile 但不适用于 re.sub 因为“count”参数首先出现,这会产生奇怪的问题。
