Python Forum
Replace changing string including uppercase character with lowercase character
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Replace changing string including uppercase character with lowercase character
#1
Hello Smile

My input lines :
<p>Material blabla ;<lb/>Dimension blabla ;<lb/></p>
<p>Sideral blublu ;<lb/>Sticky Gonzalez blibli;<lb/>Reductio ad absurdum bloblo</p>
For each "<lb/>" followed by an uppercase character, I want it replaced with a white space + same character but lowercase.

My wished output :
<p>material blabla ; dimension blabla ;<lb/></p>
<p>Sideral blublu ; sticky Gonzalez blibli; reductio ad absurdum bloblo</p>
I made several re.sub trials with unsuccessful regular expressions. I also read several things about it : it seems not so easy for a beginner in programming like me. So, if you have not an easy solution, please tell me what I should learn first before understanding it.

Thank you Smile
Reply
#2
show what you've tried.
We'll be happy to help, but will not write the code for you.
Reply
#3
Did I in fact try something?
I wanted to do something like this :
import re
list = ['<p>Material blabla ;<lb/>Dimension blabla ;<lb/></p>','<p>Sideral blublu ;<lb/>Sticky Gonzalez blibli;<lb/>Reductio ad absurdum bloblo</p>']
for member in list:
    output=re.sub(r"<lb/>\something-to-match-next-string-with-uppercase"," identified-string-with-lowercase",member)
... but it seems there is no regular expression for this.
Reply
#4
In a regex, [A-Z] will match an uppercase character.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#5
It is true !
New code, then :
list = ['<p>Material blabla ;<lb/>Dimension blabla ;<lb/></p>','<p>Sideral blublu ;<lb/>Sticky Gonzalez blibli;<lb/>Reductio ad absurdum bloblo</p>']
import re
for member in list:
    output=re.sub(r"<lb/>[A-Z]"," [a-z]",member)
    print(output)
Output :
<p>Material blabla ; [a-z]imension blabla ;<lb/></p>
<p>Sideral blublu ; [a-z]ticky Gonzalez blibli; [a-z]eductio ad absurdum bloblo</p>
So, identification is ok, replacement no.
Should my code do something like this :
1. Identify the character to be replaced - OK
2. Place this character in a variable
3. Lowercase it.
4. Put it back to the right place in the line.
?
Blush
Reply
#6
You can pass a callable to re.sub. This callable should take a regexp match object and return a string. The latter is used
to replace substrings that were found.

I think, you could adopt the following code for you needs:

def match_processor(m):
    print("Hey, I am match processor... ")
    print("Regexp engine found a substring: ", m.string[slice(*m.span())])
    print("This substring should be replaced with another one ... and I can do this!")
    replacement = '-' + m.string[slice(*m.span())] + '-'
    return replacement
    
list = ['<p>Material blabla ;<lb/>Dimension blabla ;<lb/></p>','<p>Sideral blublu ;<lb/>Sticky Gonzalez blibli;<lb/>Reductio ad absurdum bloblo</p>']
import re
for member in list:
    output = re.sub(r"<lb/>\s?[A-Z]", match_processor, member)
    print(output)
Reply
#7
Scidam,

I am sincerely grateful for your effort !
As a Beotian, I simply copy-pasted your code and ran it, unfortunately with no different result:
<p>Material blabla ; [a-z]imension blabla ;<lb/></p>
<p>Sideral blublu ; [a-z]ticky Gonzalez blibli; [a-z]eductio ad absurdum bloblo</p>
However, your proposal reminds me about "definition of callable functions" and this is good.
In your code, it is like the defined function is then not called... Or I miss something?

Cheers Smile
Reply
#8
(Mar-24-2019, 08:07 AM)silfer Wrote: In your code, it is like the defined function is then not called... Or I miss something?

match_processor function is called (by re.sub) each time when re.sub finds a substring that matches specified conditions (regexp).
Reply
#9
Sorry, scidam,
Your code produces a result. The got lines are :
<p>Material blabla ;-<lb/>D-imension blabla ;<lb/></p>
<p>Sideral blublu ;-<lb/>S-ticky Gonzalez blibli;-<lb/>R-eductio ad absurdum bloblo</p>
But the needed lines are :
<p>Material blabla ; dimension blabla ;<lb/></p>
<p>Sideral blublu ; sticky Gonzalez blibli; reductio ad absurdum bloblo</p>
The difficult task seems to be (example: first line) :
- Take got value "<lb/>D" and replace it with " d"
Reply
#10
I didn't post exact solution on purpose. This task seems to be an assignment, so, it would be better, if you try to modify the match_processor function for your needs by yourself. In this case you might ever use a lambda function instead of match_processor since string replacement requires one line of code only.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Text conversion to lowercase is not working ineuw 3 400 Jan-16-2024, 02:42 AM
Last Post: ineuw
  Virtual Env changing mysql connection string in python Fredesetes 0 325 Dec-20-2023, 04:06 PM
Last Post: Fredesetes
  Python rule about the space character surrounding the equal sign ineuw 10 1,519 Sep-21-2023, 09:17 AM
Last Post: ineuw
  How do I handle escape character in parameter arguments in Python? JKR 6 1,039 Sep-12-2023, 03:00 AM
Last Post: Apoed2023
  Function to count words in a list up to and including Sam Oldman45 15 6,413 Sep-08-2023, 01:10 PM
Last Post: Pedroski55
  Need to replace a string with a file (HTML file) tester_V 1 699 Aug-30-2023, 03:42 AM
Last Post: Larz60+
Question UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8' in position 562: ord ctrldan 23 4,610 Apr-24-2023, 03:40 PM
Last Post: ctrldan
  Replace string in a nested Dictianory. SpongeB0B 2 1,147 Mar-24-2023, 05:09 PM
Last Post: SpongeB0B
  use of escape character in re.sub and find WJSwan 1 876 Feb-16-2023, 05:19 PM
Last Post: Larz60+
  Replace with upper(string) WJSwan 7 1,545 Feb-10-2023, 10:28 AM
Last Post: WJSwan

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020