Getting multiple matches from a string with PowerShell

Posted on 2014-04-03
Last Modified: 2014-04-03
I have a bunch of log files that I'd like to parse through and pull string data out of, but the RegEx on this one is getting a little outside of my level of expertise.  I'm basically going to use code similar to that found here :
$input_path = 'c:\test\file.txt'
$regex = '' #Need help with this part
select-string -Path $input_path -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value }

Open in new window

What I really need help with is figuring out the RegEx for these log files.  Here is an example of what they look like:

<option value="954393">LASTNAME1, FIRSTNAME1 - &#x5b;lfirstname1&#x40;;</option>

<option value="819613">LASTNAME2, FIRSTNAME2 - &#x5b;firstname2.lastname2&#x40;;</option>

<option value="1151900">LASTNAME3, FIRSTNAME3 - &#x5b;firstname3.lastname3&#x40;;</option>

Open in new window

What I'm trying to match and pull out is the number inside the value="", the LASTNAME, FIRSTNAME and then I want the string between &#x5b; and &#x40; (which may or may not contain a single period in it).

Are there any RegEx experts out there that can assist?
Question by:Souladin
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
LVL 35

Expert Comment

by:Dan Craciun
ID: 39976136
Try this:
$regex = "<option value=""(\d*)"">([\w ]*), ([\w ]*)- &#x5b;(.*)&#x40;"

Open in new window

You'll find the number in $1, the lastname in $2, the firstname in $3 and the last string in $4.

LVL 35

Accepted Solution

Dan Craciun earned 500 total points
ID: 39976178
BTW, if you want to see the values, you need to do it like this:
select-string -Path $input_path -Pattern $regex -AllMatches | % { $_.Matches.Groups } | % { $_.Value }

Open in new window

It will output something like this:
<option value="954393">LASTNAME1, FIRSTNAME1 - &#x5b;lfirstname1&#x40;
<option value="819613">LASTNAME2, FIRSTNAME2 - &#x5b;firstname2.lastname2&#x40;
<option value="1151900">LASTNAME3, FIRSTNAME3 - &#x5b;firstname3.lastname3&#x40;

Open in new window

Without groups you would only see the original strings.

Author Closing Comment

ID: 39976302
That was way less complicated than I thought it would be.  Looks like I need to take that regex refresher class again.  Thanks!
LVL 35

Expert Comment

by:Dan Craciun
ID: 39976311
Glad I could help!

You could read some answers and then answer a few questions here. Bet it would trump that introductory course :)

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A procedure for exporting installed hotfix details of remote computers using powershell
Recently we ran in to an issue while running some SQL jobs where we were trying to process the cubes.  We got an error saying failure stating 'NT SERVICE\SQLSERVERAGENT does not have access to Analysis Services. So this is a way to automate that wit…
Learn the basics of if, else, and elif statements in Python 2.7. Use "if" statements to test a specified condition.: The structure of an if statement is as follows: (CODE) Use "else" statements to allow the execution of an alternative, if the …
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question