Skip to main content
 首页 » 编程设计

python之正则表达式适用于 sublime 文本搜索,但不适用于 python 脚本

2024年10月24日34JustinYoung

我想使用正则表达式搜索文件的内容。该文件的示例是:

3 General 24 
3.1 CR IOT133 (ID: 194) 24 
3.1.1 Issue 24 
4 Integration 25 
4.11 CR IOT025 (ID: 125) 25 
10.27 CR IOT111 (ID: 176) 77 

我想提取 IOTxxx 部分(因此在本例中为第 2、5 和 6 行)

我的脚本是:

import re 
fhandle = open("CR_headers.txt") 
inp = fhandle.read() 
crnumlist = re.findall('^\d{1,2}\.\d{1,2} CR (IOT\d{3}).*$', inp) 
print crnumlist 

最后一条语句打印一个空列表。我也尝试从控制台运行它,但结果是一样的。

如果我使用带有输入的 sublime text 查找:^\d{1}\.\d{1} CR (IOT\d{3}).*$ 我可以获得匹配的行。

在 windows 7 盒子上使用 python 版本 2.7.10 和 sublime text 2

任何关于我做错的想法都将不胜感激。谢谢

请您参考如下方法:

您只需要包含多行修饰符并将您的正则表达式定义为原始字符串。当满足这两个条件时,您必须使用多行修饰符。

  • 每当在您的输入正则表达式中使用 anchor ^、$ 时。
  • 并且当输入字符串包含多行时。

    crnumlist = re.findall(r'(?m)^\d{1,2}\.\d{1,2} CR (IOT\d{3}).*$', inp) 
    

例子:

>>> s = '''3 General 24 
3.1 CR IOT133 (ID: 194) 24 
3.1.1 Issue 24 
4 Integration 25 
4.11 CR IOT025 (ID: 125) 25 
10.27 CR IOT111 (ID: 176) 77''' 
>>> re.findall(r'(?m)^\d{1,2}\.\d{1,2} CR (IOT\d{3}).*$', s) 
['IOT133', 'IOT025', 'IOT111'] 
>>> re.findall(r'^\d{1,2}\.\d{1,2} CR (IOT\d{3}).*$', s) 
[]