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
Last updated