Skip to main content
 首页 » 编程设计

python之在 Python 中匹配行首的字符串

2025年05月04日23emanlee

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

这是文本文件的内容:

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”参数首先出现,这会产生奇怪的问题。