简体   繁体   中英

How to use regexp on file, line by line, in Python

Here is my regexp: f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)

I'd have to apply this on a file, line by line. The line by line is OK, simple reading from file, and a loop. But how do I apply the regexp to the lines?

Thanks for all the help, and sorry for the noob question.

The following expression returns a list; every entry of that list contains all matches of your regexp in the respective line.

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

You can try something like this:

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)

Note that Python automatically compiles and caches the regex, so a separate compile step is not required in this case.

Another way to do

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)

use import re , then re.compile() with your pattern as an argument, and use the resulting object's match attribute on each line. something like this..

import re 
pat = re.compile(r'f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)')
for line in file:
  # use pat.match, pat.search .. etc

I have used this aproach:

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))   

I am confused

    for line in file

All answers include above line but line in this code line is single character and not the whole line. if file has

  1. This is first line
  2. This is second line then in for line in file line selects only 'T' and in next iteration only 'h' instead of whole first line 'This is first line'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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