Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: Extracting multiple match with regex

by hexcoder (Curate)
on Apr 14, 2016 at 19:21 UTC ( [id://1160452]=note: print w/replies, xml ) Need Help??


in reply to Extracting matches using boundries with regex

Hello to the monastery!

First, in the for loop of the second block I think you should use $var2 instead of $var in the if condition. The Perl compiler told me this after I inserted

use strict; use warnings;
at the beginning, which is recommended.

Second, the g modifier in the second block

if ($rows[2] =~ m/\[R\]/g) {
skips the first [R] of the second column. So, it is not available any more for the next match.

If I change your script to

use strict; use warnings; open (OUTFILE, "< History21.txt") or die "Could not open source file. +$!"; open (NEW_MED, "> History_MED1.txt") or die "Could not open med file. +$!"; open (NEW_SUR, "> History_SUR1.txt") or die "Could not open sur file. +$!"; my $count2 = 1; while (my $line = <OUTFILE>) { my @rows = split(/\|\|/, $line); if ($rows[1] =~ m/\[R\]/g) { if ((my @var)= $rows[1] =~ m/\](.*?)\[/g) { foreach my $var (@var) { if ($var =~ /^\s$/g) { #DO NOTHING SINCE WE ONLY WANT IF THERE IS ANYTHI +NG INSIDE THE 2 R BRACKETS } else { print NEW_MED "$rows[0] || $var\n"; } } } } if ($rows[2] =~ m/\[R\]/) { if ((my @var2)= $rows[2] =~ m/\](.*?)\[/g) { # I AM ASSUMING +IT WILL RETURN SIMILAR TO THE PREVIOUS IF STATEMENT FOR ROW1 ABOVE foreach my $var2 (@var2) { if ($var2 =~ /^\s$/g) { #DO NOTHING SINCE WE ONLY WANT IF THERE IS ANYTHI +NG INSIDE THE 2 R BRACKETS } else { print NEW_SUR "$rows[0] || $var2\n"; } } } } $count2++; } close(NEW_MED); close(NEW_SUR);
I get the missing output.
ZZZZZ00DFL || No pertinent past medical history ZZZZZ00DFL || No pertinent past medical history ZZZZZ00C4H || High Blood Pressure ZZZZZ00C4H || Kidney stones ZZZZZ00C4H || SOAPP-R Score : Moderate/High Risk: 19 ZZZZZ00C4H || Sleep Apnea Assessment(STOP-BANG): ( 2/4 ); 7/2/2014 ZZZZZ00C4H || Orthotic brace tried for pain relief: Yes: limited bene +fit ZZZZZ00C4H || TENS Unit tried for pain relief: Yes: limited benefit ZZZZZ00C4H || Tried Topical Compound Cream?: Yes: limited benefit ZZZZZ00C4H || Acupuncture therapy tried for pain relief: Yes: limited + benefit ZZZZZ00C4H || Chiropractic therapy tried for pain relief: Yes: limite +d benefit ZZZZZ00C4H || Physical therapy tried for pain relief: Yes: limited be +nefit ZZZZZ00C4H || Massage therapy tried for pain relief: Yes: limited ben +efit \ ZZZZZ00C4H || \
and
ZZZZZ00DFL || UNREMARKABLE ZZZZZ00DFL || UNREMARKABLE ZZZZZ00C4H || Hysterectomy ZZZZZ00C4H || Spinal Fusion: L4-5, L5-S!; 2010 \ ZZZZZ00C4H || \

Replies are listed 'Best First'.
Re^2: Extracting multiple match with regex
by NewMonk2Perl (Sexton) on Apr 14, 2016 at 19:28 UTC
    Thank you! Yea I didnt know that the /g modify did that, I love this place, thanks to all the perl gurus in here for helping us newbies! Cheers!

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1160452]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (3)
As of 2024-04-19 17:25 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found