Examples
EXPRESSO
Matching Example
Input Text:
Invoice date: 2023-11-26. Total amount paid: $123.45 (including 20% VAT).
Order placed on: 15/10/2024. Total discount applied: 15% and 10%.
Transaction completed: €678.90 on 2022-12-01. Currency conversion fee: 2.5%.
Payment received: £345.67 on 01/09/2023. Early bird discount: 5%.
Subscription renewed: $49.99 (tax: 8%) on 26-Nov-2024.
Patterns:
classes:
- class: Date
patterns:
- '(?<year>(?<Integer>\d{4}))-(?<month>(?<Integer>\d{2}))-(?<day>(?<Integer>\d{2}))'
- '(?<month>(?<Integer>\d{2}))/(?<day>(?<Integer>\d{2}))/(?<year>(?<Integer>\d{4}))'
- '(?<day>(?<Integer>\d{2}))-(?<month>[JFMAJSOND][a-z]{2})-(?<year>(?<Integer>\d{4}))'
- class: Integer
extends: Number
patterns: [ '\d+' ]
- class: Decimal
extends: Number
patterns: [ '${?Integer}\.${?Integer}' ]
- class: USD
extends: Currency
patterns: [ '\$' ]
- class: EUR
extends: Currency
patterns: [ '€' ]
- class: GBP
extends: Currency
patterns: [ '£' ]
- class: Money
patterns: [ '${Currency}${Number}' ]
- class: Percent
patterns: [ '${Number}%' ]
classes:
Date:
- '(?<year>(?<Integer>\d{4}))-(?<month>(?<Integer>\d{2}))-(?<day>(?<Integer>\d{2}))'
- '(?<month>(?<Integer>\d{2}))/(?<day>(?<Integer>\d{2}))/(?<year>(?<Integer>\d{4}))'
- '(?<day>(?<Integer>\d{2}))-(?<month>[JFMAJSOND][a-z]{2})-(?<year>(?<Integer>\d{4}))'
Number:
Integer: [ '\d+' ]
Decimal: [ '${?Integer}\.${?Integer}' ]
Currency:
USD: [ '\$' ]
EUR: [ '€' ]
GBP: [ '£' ]
Money: [ '${Currency}${Number}' ]
Percent: [ '${Number}%' ]
Java Code:
String classes = """
Date:
- '(?<year>(?<Integer>\\d{4}))-(?<month>(?<Integer>\\d{2}))-(?<day>(?<Integer>\\d{2}))'
- '(?<month>(?<Integer>\\d{2}))/(?<day>(?<Integer>\\d{2}))/(?<year>(?<Integer>\\d{4}))'
- '(?<day>(?<Integer>\\d{2}))-(?<month>[JFMAJSOND][a-z]{2})-(?<year>(?<Integer>\\d{4}))'
Number:
Integer: [ '\\d+' ]
Decimal: [ '${?Integer}\\.${?Integer}' ]
Currency:
USD: [ '\\$' ]
EUR: [ '€' ]
GBP: [ '£' ]
Money: [ '${Currency}${Number}' ]
Percent: [ '${Number}%' ]
""";
String input = """
Invoice date: 2023-11-26. Total amount paid: $123.45 (including 20% VAT).
Order placed on: 15/10/2024. Total discount applied: 15% and 10%.
Transaction completed: €678.90 on 2022-12-01. Currency conversion fee: 2.5%.
Payment received: £345.67 on 01/09/2023. Early bird discount: 5%.
Subscription renewed: $49.99 (tax: 8%) on 26-Nov-2024.
""";
RegexMatcher matcher = Expresso.compile(classes).matcher(input);
while (matcher.find()) {
final String group = "%s: %s".formatted(matcher.groupName(), matcher.group());
final String subgroups = IntStream.range(1, matcher.groupCount())
.mapToObj(i -> "%s: %s".formatted(matcher.groupName(i), matcher.group(i)))
.collect(Collectors.joining(", "));
System.out.println(group + (subgroups.isEmpty() ? "" : " (" + subgroups + ")"));
}
Capture All Groups
RegexMatcher matcher = Expresso.compile(classes).matcher(input);
Output:
Date: 2023-11-26 (year: 2023, Integer: 2023, month: 11, Integer: 11, day: 26, Integer: 26)
Money: $123.45 (USD: $, Decimal: 123.45)
Percent: 20% (Integer: 20)
Date: 15/10/2024 (month: 15, Integer: 15, day: 10, Integer: 10, year: 2024, Integer: 2024)
Percent: 15% (Integer: 15)
Percent: 10% (Integer: 10)
Money: €678.90 (EUR: €, Decimal: 678.90)
Date: 2022-12-01 (year: 2022, Integer: 2022, month: 12, Integer: 12, day: 01, Integer: 01)
Percent: 2.5% (Decimal: 2.5)
Money: £345.67 (GBP: £, Decimal: 345.67)
Date: 01/09/2023 (month: 01, Integer: 01, day: 09, Integer: 09, year: 2023, Integer: 2023)
Percent: 5% (Integer: 5)
Money: $49.99 (USD: $, Decimal: 49.99)
Percent: 8% (Integer: 8)
Date: 26-Nov-2024 (day: 26, Integer: 26, month: Nov, year: 2024, Integer: 2024)
Capture Numbers
RegexMatcher matcher = Expresso.compile(classes).matcher(input).select("Number");
Output:
Integer: 2023
Integer: 11
Integer: 26
Decimal: 123.45
Integer: 20
Integer: 15
Integer: 10
Integer: 2024
Integer: 15
Integer: 10
Decimal: 678.90
Integer: 2022
Integer: 12
Integer: 01
Decimal: 2.5
Decimal: 345.67
Integer: 01
Integer: 09
Integer: 2023
Integer: 5
Decimal: 49.99
Integer: 8
Integer: 26
Integer: 2024
Capture Decimals
RegexMatcher matcher = Expresso.compile(classes).matcher(input).select("Decimal");
Output:
Decimal: 123.45
Decimal: 678.90
Decimal: 2.5
Decimal: 345.67
Decimal: 49.99
Capture Dates
RegexMatcher matcher = Expresso.compile(classes).matcher(input).select("Date");
Output:
Date: 2023-11-26 (year: 2023, Integer: 2023, month: 11, Integer: 11, day: 26, Integer: 26)
Date: 15/10/2024 (month: 15, Integer: 15, day: 10, Integer: 10, year: 2024, Integer: 2024)
Date: 2022-12-01 (year: 2022, Integer: 2022, month: 12, Integer: 12, day: 01, Integer: 01)
Date: 01/09/2023 (month: 01, Integer: 01, day: 09, Integer: 09, year: 2023, Integer: 2023)
Date: 26-Nov-2024 (day: 26, Integer: 26, month: Nov, year: 2024, Integer: 2024)
Capture Years
RegexMatcher matcher = Expresso.compile(classes).matcher(input).select("year");
Output:
year: 2023 (Integer: 2023)
year: 2024 (Integer: 2024)
year: 2022 (Integer: 2022)
year: 2023 (Integer: 2023)
year: 2024 (Integer: 2024)
Capture Percent Amounts
RegexMatcher matcher = Expresso.compile(classes).matcher(input).select("Percent").select("Number");
Output:
Integer: 20
Integer: 15
Integer: 10
Decimal: 2.5
Integer: 5
Integer: 8
Try It Yourself
Want to see this example in action? Use our Interactive Demo Application to experiment with the patterns, input, and output. You can modify the classes, input text, or try capturing different groups and observe the results live.
Last updated