Intan Mohd Mohdi
Intan Mohd Mohdi

Reputation: 1

removing trailing words end with : from a string using perl

i have question on how to remove specific set of words that end with : in a string using perl.

For instance,

lunch_at_home: start at 1pm.

I want to get only "start at 1 pm"after discarding "lunch_at_home:"

note that lunch_at_home is just an example. It can be any string with any length but it should end with ":"

Upvotes: 0

Views: 267

Answers (5)

serenesat
serenesat

Reputation: 4709

You can use split function to achieve this:

my $string = "lunch_at_home: start at 1pm.";
$string = (split /:\s*/, $string)[1];
print "$string\n";

Upvotes: 0

RobEarl
RobEarl

Reputation: 7912

split on : and discard the first part:

my (undef, $value) = split /:\s*/, $string, 2;

The final argument (2), ensures this works correctly if the trailing string contains a :.

Upvotes: 0

Johanna Walter
Johanna Walter

Reputation: 34

If you want to remove a specific set of words that are set apart from the data you want:

my $string = 'lunch_at_home: start at 1pm.';
$string =~ s/\b(lunch_at_home|breakfast_at_work):\s*//;

That would leave you with start at 1pm. and you can expand the list as needed.

If you just want to remove any "words" (we'll use the term loosely) that end with a colon:

my $string = 'lunch_at_home: start at 1pm.';
$string =~ s/\b\S+:\s*//;

You'd end up with the same thing in this case.

Upvotes: 1

leu
leu

Reputation: 2081

take

my $string = "lunch_at_home: start at 1pm.";

to remove everything up to the last ":" and the period at the end of the entry as in your question:

$string =~ s/.*: (.*)\./$1/;

to remove everything up to the first ":"

$string =~ s/.*?: (.*)\./$1/;

Upvotes: 0

Jens
Jens

Reputation: 69450

This should do the job.

my $string = "lunch_at_home: start at 1pm." 
$string =~ s/^.*:\s*//;

It will remove all char before : including the :

Upvotes: 3

Related Questions