How to replace this string with re.sub? [duplicate] - regex

This question already has answers here:
python regular expression replacing part of a matched string
(5 answers)
Closed 4 years ago.
Assume two strings, foo.example.com/1.2.3/sdk-foo-bar.min.js and foo.example.com/1.2.3/sdk-foo-bar-dev.min.js.
By default, the first one is used in the HTML code, but depending on a parameter, I need to replace it with the second (i.e. add the -dev).
I have a regex already (foo\.example\.com/1\.2\.3/(sdk-foo-bar).min\.js) that looks for the string and captures the group sdk-foo-bar, but how can I now replace this group with sdk-foo-bar-dev??

inp = 'foo.example.com/1.2.3/sdk-foo-bar.min.js'
m = re.search('(^.*)(.min.js)', inp)
if m:
print ('%s-%s%s' % (m.group(1), 'dev', m.group(2)))

Related

How to use pandas extract to remove string in a pandas column [duplicate]

This question already has an answer here:
Python Regular Expressions for a question mark [duplicate]
(1 answer)
Closed 10 months ago.
I have this dataframe:
d = pd.DataFrame({'test':['test?_Apple','test?_Banana', 'test?_limon']})
And I want to remove the test?_ string from test columns values to get this:
d = pd.DataFrame({'test':['Apple','Banana', 'limon']})
I am trying:
d['test'] = d['test'].str.extract(r'test?_(.*)')
but it returns NAN
Can someone help me on this one?
Escape ? because special regex character:
d['test'] = d['test'].str.extract(r'test\?_(.*)')

Multiple instructions in Regex [duplicate]

This question already has answers here:
Regex using javascript to return just numbers
(14 answers)
Closed 3 years ago.
Suppose I have this text :
qsdfq fmld - 123 -mqlskdj -6464 - qlsdkjflj - 54654 -qsdfqsdf -2542
And I want to capture all numbers. A solution could be :
\D*(\d*)\D*(\d*)\D*(\d*)\D*(\d*)
But I don't know how many numbers I have. So I want to use the + sign.
I tried the following but it does not work :
[\D*(\d*)]+
You can simply use \d+ and global flag ( g )
let str = `qsdfq fmld - 123 -mqlskdj -6464 - qlsdkjflj - 54654 -qsdfqsdf -2542`
let op = str.match(/\d+/g)
console.log(op)
On side note: I have JS code just to show a working example.

Invalid match for regex ('\pL' does not work within a character class) [duplicate]

This question already has answers here:
Matching Unicode letter characters in PCRE/PHP
(5 answers)
Closed 4 years ago.
Why does PHP return 0 for current code? I just want to validate users name and allow to pass all letter signs available (incl. all characters like śćę......). What I'm doing wrong?
$var = 'cz -ęsc';
var_dump(preg_match('/^[\pL -]{1,35}$/', $var)); // int(0)
You need to enable Unicode for your regex, by setting the u flag, i.e.:
$var = 'cz -ęsc';
var_dump(preg_match('/^[\pL -]{1,35}$/u', $var)); // int(1)
For details, see the u (PCRE_UTF8) section in the docs: http://php.net/manual/en/reference.pcre.pattern.modifiers.php

Python2.7 re fullmatch alternatives [duplicate]

This question already has answers here:
Backport Python 3.4's regular expression "fullmatch()" to Python 2
(2 answers)
Closed 5 years ago.
Is there a way to match a complete string before python3.4(as they introduced fullmatch() method here.)
For eg. If i have a string '12.345' and If i want to check for float with no exponential and i use the pattern: r'-?(?:\d+())?(?:\.\d+())?'. But this pattern also works for '12.345abc'.
How can i make re to not match second string '12.345abc'?
Thanks!
You might want to use anchors in combination with filter() and lambda():
import re
strings = ['12.345', '12.345abc']
rx = re.compile(r'^\d+(\.\d+)?$')
numbers = list(filter(lambda x: rx.match(x), strings))
print(numbers)
# ['12.345']
This makes sure no rubbish is matched afterwards.

Drop values between two characters in a string [duplicate]

This question already has answers here:
get filename from url path in R
(2 answers)
Closed 7 years ago.
Suppose I have multiple forms of the following string
x <- "/Users/name/Google Drive/Thesis/Data/Data X and Y/UK//5port/5groups.csv"
I want to drop the values between the first / and the last / to return only 5groups.csv. I used gsub but couldn't find how to specify that pattern.
My question is the same like this one but in R.
If we are using sub
sub('.*\\/', '', x)
#[1] "5groups.csv"