试图对问题使用不同的标题,但如果您可以改进问题,请这样做.
这是我的正则表达式: f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)
我必须逐行在文件上应用它.逐行是正常的,从文件中读取简单,循环.但是如何将正则表达式应用于线条呢?
感谢所有的帮助,并对noob问题感到抱歉.
phy*_*nfo 23
以下表达式返回一个列表; 该列表的每个条目都包含相应行中正则表达式的所有匹配项.
>>> import re
>>> [re.findall(r'f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)',line)
for line in open('file.txt')]
Run Code Online (Sandbox Code Playgroud)
你可以尝试这样的事情:
import re
regex = re.compile("f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)")
with open("my_file.txt") as f:
for line in f:
result = regex.search(line)
Run Code Online (Sandbox Code Playgroud)
import re
with open('file.txt') as f:
for line in f:
match = re.search('f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)', line)
Run Code Online (Sandbox Code Playgroud)
请注意,Python会自动编译和缓存正则表达式,因此在这种情况下不需要单独的编译步骤.
小智 5
另一种方法
import re
[line for line in open('file.txt') if re.match(r'f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)',line)]
Run Code Online (Sandbox Code Playgroud)
使用import re,然后re.compile()将您的模式作为参数,并match在每一行上使用结果对象的属性。像这样的东西..
import re
pat = re.compile(r'f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)')
for line in file:
# use pat.match, pat.search .. etc
Run Code Online (Sandbox Code Playgroud)