All Apps and Add-ons

Field Extraction Regex - optional fields

atornes
Path Finder

I'm terrible with Regex's and can't figure out what is wrong with mine...

I have this Regex:

(?P<date>[^,\n]+),\d*--(?P<account>[^,]+),(?P<provider>[^,]+),(?P<product>[^,]+),(?P<service_username>[^,]*),(?P<billing_status>[^,]+),(?P<activities>[^,]*),(?P<requests>[^,]*),(?P<days>[^,]*),(?P<ruuid>[^,]*)

Currently working fine for events like:

2014-04-03,1034--account,provider,product,username,Billable,10073107,,19,e5xwcmhbrk,

We've added another field to the end that is optional for some events (80--parent below):

2014-04-03,1307--account,provider,product,username,Billable,1614,0,,,80--parent

I can't figure out how to extract that "parent" value when it exists (I don't want the preceding "80--". It should work exactly as the 1304--account works in the currently functioning regex. When I try to essentially copy that part of the functioning regex, my queries only return the events that have that parent field name

0 Karma
1 Solution

somesoni2
Revered Legend

Try this.

"^(?P<date>[^,\n]+),\d+--(?P<account>[^,]+),(?P<provider>[^,]+),(?P<product>[^,]+),(?P<service_username>[^,]*),(?P<billing_status>[^,]+),(?P<activities>[^,]*),(?P<requests>[^,]*),(?P<days>[^,]*),(?P<ruuid>[^,]*)[,\d-]*(?P<parent>.*)"

Updated answer

This will be scalable. For every new field to be added at the end of event, your can add "[,\d-]*(?P<newFieldName>[^,]*)" to the regex.

"^(?P<date>[^,\n]+),\d+--(?P<account>[^,]+),(?P<provider>[^,]+),(?P<product>[^,]+),(?P<service_username>[^,]*),(?P<billing_status>[^,]+),(?P<activities>[^,]*),(?P<requests>[^,]*),(?P<days>[^,]*),(?P<ruuid>[^,]*)[,\d-]*(?P<parent>[^,]*)"

View solution in original post

somesoni2
Revered Legend

Try this.

"^(?P<date>[^,\n]+),\d+--(?P<account>[^,]+),(?P<provider>[^,]+),(?P<product>[^,]+),(?P<service_username>[^,]*),(?P<billing_status>[^,]+),(?P<activities>[^,]*),(?P<requests>[^,]*),(?P<days>[^,]*),(?P<ruuid>[^,]*)[,\d-]*(?P<parent>.*)"

Updated answer

This will be scalable. For every new field to be added at the end of event, your can add "[,\d-]*(?P<newFieldName>[^,]*)" to the regex.

"^(?P<date>[^,\n]+),\d+--(?P<account>[^,]+),(?P<provider>[^,]+),(?P<product>[^,]+),(?P<service_username>[^,]*),(?P<billing_status>[^,]+),(?P<activities>[^,]*),(?P<requests>[^,]*),(?P<days>[^,]*),(?P<ruuid>[^,]*)[,\d-]*(?P<parent>[^,]*)"

carasso
Splunk Employee
Splunk Employee

The correct regex is:

"(?P[^,n]+),\d*--(?P[^,]+),(?P[^,]+),(?P[^,]+),(?P[^,]),(?P[^,]+),(?P[^,]\
*),(?P[^,]
),(?P[^,]),(?P[^,])(?:,\d*--(?P.*))?"

The entire extra argument is encased in one "(?: ... )?". The other regexes suggested above allow invalid things, such as just "5-5,5-5,parent"

0 Karma

somesoni2
Revered Legend

For the events where this field is not present,comma is also not present so its options here. See the updated answer for scalable regex.

0 Karma

atornes
Path Finder

Works. Will this easily allow me to add other fields? Seems weird that its not comma-delimited like everything else

0 Karma
Got questions? Get answers!

Join the Splunk Community Slack to learn, troubleshoot, and make connections with fellow Splunk practitioners in real time!

Meet up IRL or virtually!

Join Splunk User Groups to connect and learn in-person by region or remotely by topic or industry.

Get Updates on the Splunk Community!

Vibe-coding, AI, and Splunkcraft: Highlights from the .conf26 Builder Bar

If you stopped by the Builder Bar at .conf26, thank you! This year, we brought ...

Thanks for the Memories: .conf26 Took Learning to New Heights

Thank you, Splunk Community, for making .conf26 in Denver one for the books. From packed Splunk University ...

Best Practices: Splunk auto adjust pipeline queue

When you enable autoAdjustQueue in Splunk, maxSize should be understood as the queue size Splunk starts with ...