python正则表达式屏幕清理


我正在尝试编写一个python脚本,该脚本执行一个命令来筛选下面的擦除结果
如果你能帮我写一个可以
根据第一列中提供的队列编号,选择第二列中的使用百分比
先谢谢你。

选择 | 换行 | 行号
  1. import re
  2. content = """NUMBER of Queues = 5
  3. SYSTEM Treshold = 80%
  4.   ==================================================================
  5.  
  6. QUEUE   USAGE   TOTAL book1   book2
  7.  
  8. ------------------------------------------------------------------
  9.  
  10. 0001 18%   822   481    98  
  11.  
  12. 0002 16%   345   765    88  
  13.  
  14. 0003 10%   400   300   166  
  15.  
  16. 0004 15%   994   322    177  
  17.  
  18. 0005 17%   348   297    131  
  19.  
  20. ---------------------------------------------------------- """
  21.  
  22. m = re.match("(0001)/(\d{%})", content)           
  23. if m:
  24.     print m.group(0)      
  25.     print m.group(1)
  26.  
  27.  

当我从命令提示符运行此命令时,没有显示任何内容
我能够使用php preg_Match_all完成这个屏幕擦除
但我想对python中的re模块执行同样的操作。
如有建议和帮助,我们将不胜感激
谢谢

# 回答1


像Kodos这样的正则表达式调试器在处理正则表达式时很方便。

选择 | 换行 | 行号
  1. >>> patt = re.compile(r"(0001) ([0-9]+)", re.MULTILINE)
  2. >>> m = re.search(patt, content)
  3. >>> m.group(1)
  4. '0001'
  5. >>> m.group(2)
  6. '18'
  7. >>> 
# 回答2


下面是两个变体,说明了如何获取所有值。

选择 | 换行 | 行号
  1. for i in range(1, 6):
  2.     patt = re.compile(r"(%04d) ([0-9]+)" % (i), re.MULTILINE)
  3.  
  4.     m = re.search(patt, content)
  5.     if m:
  6.         print m.group(1), m.group(2)
选择 | 换行 | 行号
  1. patt = re.compile(r"(0+[1-9]+) ([0-9]+)", re.MULTILINE)
  2. print patt.findall(content)
# 回答3


非常感谢你,bvdet。以上所有你建议的都是我想要的。我真的很感激。
你能给我解释一下吗?
# 回答4


Patt=re.Compile(r"(0*[1-9]+)([0-9]+)",re.MULTILINE)
圆括号内的正则表达式将子字符串作为一个组进行匹配,并保存该子字符串。子字符串可以由
匹配对象
组()
方法。"0*"匹配0个或多个"0"字符。"[1-9]+"匹配一个或多个数字。""匹配空格字符。同样,"[0-9]+"匹配1个或多个数字。在这种情况下,标志're.MULTILINE'实际上不是必需的,但通常会使'^'和'$'匹配每行的开始和结束,而不是整个字符串的开始和结束。使用变体"^(0*[1-9]+)([0-9]+)",将需要标志're.MULTILINE'。

标签: python

添加新评论