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}%' ]

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