4
\$\begingroup\$

I have a list of error messages:

def errorMessages = ["Line : 1 Invoice does not foot Reported"
 "Line : 2 Could not parse INVOICE_DATE value"
 "Line 3 : Could not parse ADJUSTMENT_AMOUNT value"
 "Line 4 : MATH ERROR"
 "cl_id is a required field"
 "File Error : The file does not contain delimiters"
 "lf_name is a required field"]

I am trying to create a new list which doesn't match the regex "^Line\\s(?:(\\d+)\\s)?\\s*:\\s+(\\d+)?.+" but has the text Invoice does not foot Reported.

My desired new list should be like this:

def headErrors= ["Line : 1 Invoice does not foot Reported"
 "cl_id is a required field"
 "File Error : The file does not contain delimiters"
 "lf_name is a required field"]

This is what I am doing for now:

regex = "^Line\\s(?:(\\d+)\\s)?\\s*:\\s+(\\d+)?.+"
errorMessages.each{
 if(it.contains('Invoice does not foot Reported'))
 headErrors.add(it)
 else if(!it.matches(regex)
 headErrors.add(it)
}

Is there a way it can be done just using regex instead of if else?

Jamal
35.2k13 gold badges134 silver badges238 bronze badges
asked Apr 7, 2015 at 16:15
\$\endgroup\$

1 Answer 1

6
\$\begingroup\$

Use findAll() instead of each(). findAll() is a filter function which can be used on a Collection/Iterable or Map. It filters the result on satisfying the condition provided by the Closure parameter.

Here, you can filter String which has the desired text or does not match with the supplied regex. Using findAll is better than each because it returns the filtered collection as a result as compared to each which returns the Collection itself.

def regex = "^Line\\s(?:(\\d+)\\s)?\\s*:\\s+(\\d+)?.+"
def headErrors = errorMessages.findAll { 
 it.contains('Invoice does not foot Reported') || !(it ==~ regex) 
}
assert headErrors == [
 'Line : 1 Invoice does not foot Reported', 
 'cl_id is a required field', 
 'File Error : The file does not contain delimiters', 
 'lf_name is a required field'
]
answered Apr 7, 2015 at 17:34
\$\endgroup\$
1

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.