Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I replace a particular character with its upper-case counterpart?

Tags:

perl

Consider the following string

String = "this is for test. i'm new to perl! Please help. can u help? i hope so."

In the above string after . or ? or ! the next character should be in upper case. how can I do that?

I'm reading from text file line by line and I need to write modified data to another file.

your help will be greatly appreciated.

like image 461
Sirga Avatar asked Dec 06 '22 18:12

Sirga


2 Answers

you could use a regular expression try this:

my $s = "...";
$s =~ s/([\.\?!]\s*[a-z])/uc($1)/ge; # of course $1 , thanks to plusplus

the g-flag searches for all matches and the e-flag executes uc to convert the letter to uppercase

Explanation:

  • with [.\?!] you search for your punctuation marks
  • \s* is for whitespaces between the marks and the first letter of your next word and
  • [a-z] matches on a single letter (in this case the first one of the next word

the regular expression mentioned above searches with these patterns for every appearance of a punctuation mark followed by (optional) whitespaces and a letter and replaces it with the result of uc (which converts the match to uppercase).

For example:

my $s = "this is for test. i'm new to perl! Please help. can u help? i hope so.";
$s =~ s/([\.\?!]\s*[a-z])/uc(&1)/ge;
print $s;

will find ". i", "! P", ". c" and "? i" and replaces then, so the printed result is:

this is for test. I'm new to perl! Please help. Can u help? I hope so.
like image 129
Hachi Avatar answered Jan 08 '23 03:01

Hachi


You can use the substitution operator s///:

   $string =~ s/([.?!]\s*\S)/ uc($1) /ge;
like image 21
Eugene Yarmash Avatar answered Jan 08 '23 03:01

Eugene Yarmash