1. (?=...)和(?!...) 在目标字符串中实现一个前视匹配,而不必实际上使用这些字符串。前者是一个正向前视断言,后者是负向前视断言。
import re
data='''
Guido van Rossum
Tim Peters
Alex Martelli
Just van Rossum
Raymond Hettinger
'''
print(re.findall(r'\w+(?= van Rossum)', data)) # ['Guido', 'Just']
data = '''
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
'''
print(re.findall(r'(?m)^\s+(?!noreply|postmaster)(\w+)', data)) # ['sales', 'end', 'admin']
?m表示匹配多行
2. 在程序中调用其它程序,需要调用os.popen(),尽管os.popen()命令现在已经被subprocess模块所替换,但它更容易使用。
import re
import os
f = os.popen('tasklist /nh', 'r');
for eachline in f:
print(re.findall(r'([\w.]+(?:[\w.]+)*)\s\s+(\d+) \w+\s\s+\d+\s\s+([\d,]+ K)', eachline.rstrip()))
f.close()
# []
# [('Process', '0', '24 K')]
# [('System', '4', '308 K')]
# [('smss.exe', '344', '1,544 K')]
# .....