xavier
xavier

Reputation: 816

passing string to sub.re not working in Python

This is so far what has been my progress with this regex function :

import os, re

dpath="/root/tree/def/"

fmatch = re.compile(r'\s+''[\[]+''[A-Z]+''[\]]+')
pmatch = fmatch.match('[FLAC]')

def replace(pmatch,df):
    m = re.sub(fmatch,df)
    print (m)



def regex(dpath):
    for df in os.listdir(dpath):
        replace(pmatch, df)

regex (dpath)

First do a for loop and look for files in (dpath), then pass the directory name string to replace(). But I am getting missing argument 'string' error :

root@debian:~# python regex3.py
Traceback (most recent call last):
  File "regex3.py", line 18, in <module>
    regex (dpath)
  File "regex3.py", line 16, in regex
    replace(pmatch, df)
  File "regex3.py", line 9, in replace
    m = re.sub(fmatch,df)
TypeError: sub() missing 1 required positional argument: 'string'

Upvotes: 1

Views: 4448

Answers (2)

JayRizzo
JayRizzo

Reputation: 3616

Using @martin-konecny 's Example,

I got this that worked.

Create Files for Example

# Run this in your Shell/Terminal
touch /tmp/abc.FLAC
touch /tmp/abcd.FLAC

Run Python

import re
import os

dpath = '/tmp/'

fmatch = re.compile(r'.+\.FLAC')
pmatch = fmatch.match('[FLAC]')


def replace(pmatch, df):
    m = fmatch.sub('[REDACTED]', df)
    print(m)


def regex(dpath):
    for df in os.listdir(dpath):
        replace(pmatch, df)


regex(dpath)

Result:

# ...
# [REDACTED]
# [REDACTED]
# ...

Great if you want to run a search and keep a selection of your results secret.

Upvotes: 0

Martin Konecny
Martin Konecny

Reputation: 59601

It seems that you want to replace alls all matches of the RegEx \s+[\[]+[A-Z]+[\]]+ to [FLAC]

Make sure you do the following:

def replace(pmatch,df):
    m = fmatch.sub('[FLAC]', df)
    print (m)

Upvotes: 1

Related Questions