繁体   English   中英

如何在 Python 中逐行使用文件中的正则表达式

[英]How to use regexp on file, line by line, in Python

这是我的正则表达式: f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)

我必须逐行将其应用于文件。 一行一行就OK了,简单的从文件中读取,一个循环。 但是如何将正则表达式应用于这些行?

感谢您的所有帮助,并对菜鸟问题感到抱歉。

以下表达式返回一个列表; 该列表的每个条目都包含相应行中正则表达式的所有匹配项。

>>> import re
>>> [re.findall(r'f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)',line) 
            for line in open('file.txt')]

你可以尝试这样的事情:

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)
import re
with open('file.txt') as f:
    for line in f:
        match = re.search('f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)', line)

请注意,Python 会自动编译并缓存正则表达式,因此在这种情况下不需要单独的编译步骤。

另一种方法

import re
[line for line in open('file.txt') if re.match(r'f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)',line)]
for line in file:
   line = re
           .match("f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)",line)
           .group(0)

使用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

我使用了这种方法:

import re
#Define the search term:
pattern = r"f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)" #pattern must be enclosed in quotes

#Create an empty list:
data = []

#then

for line in open(r'file.txt'):
    if line !='':  #<-- To make sure the whole file is read
        word = re.findall(pattFinder1, line)
        data.append(str(word))   

我很困惑

    for line in file

所有答案都包括上述行,但此代码行中的行是单个字符而不是整行。 如果文件有

  1. 这是第一行
  2. 这是第二行,然后在for line in file line 中仅选择 'T' 并且在下一次迭代中仅选择 'h' 而不是整个第一行 'This is first line'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM