Ir al contenido
Menú
Se marcó esta pregunta
1 Responder
2652 Vistas

This is a regex that can include all the following capture groups: prefix1, year, prefix2, month, prefix3, seq, suffix.

The prefix* groups are the separators between the year, month and the actual increasing sequence number (seq).

e.g:

  • Starting Sequence : INV2301001
  • Refund Starting Sequence : RINV2301001
  • Sequence Override Regex : (?P[A-Z]{1,})(?P\d{2})(?P\d{2})(?P\d{3,})

This expressions defines the following invoice numbering scheme : INVYYMMSSS whereby SSS will restart at 001 on a monthly basis.

This will result in the following invoice number for e.g. the third invoice of Februari 2023 : INV2302003

Now, I 'd like to modify my REGEX with this rule :

The expression defines the following invoice numbering scheme : INVYYYYSSS whereby SSS will restart at 001 the 1 april of the next year AND from the 1 january 2024 including 31 march 2024 the YYYY needs to be YYYY-1.

  • Start Sequence : 1 april 2023
  • End Sequence : 31 march 2024

The result is :

  • 1 april 2023 - INV2023001 - YYYY = 2023 and SSS = 001
  • 20 december 2023 - INV2023158 - YYYY = 2023 and SSS = 158
  • 5 january 2024 - INV2023159 - YYYY = 2023 and SSS = 159
  • 31 march 2024 - INV2023230 - YYYY = 2023 and SSS = 230
  • 1 april 2024 - INV2024001 - YYYY = 2024 and SSS = 001
  • ...

?? Sequence Override Regex : ?

Best Regards, Youssef


Avatar
Descartar
Mejor respuesta

To modify the regular expression (regex) to include the rule for the invoice numbering scheme you described, you can use the following expression in Python:

import re

sequence_override_regex = r"(?P[A-Z]{1,})(?P20(?:2[3-9]|3[0-9])|(?:20)?24)(?P\d{2})(?P(?:(?:0[1-9])|(?:1[0-2])))(?P\d{3})(?P)"

# Test the regex with the example inputs
sequence = "INV2301001"
matches = re.match(sequence_override_regex, sequence)
if matches:
prefix1 = matches.group("prefix1")
year = matches.group("year")
prefix2 = matches.group("prefix2")
month = matches.group("month")
prefix3 = matches.group("prefix3")
seq = matches.group("seq")
suffix = matches.group("suffix")
 
# Modify the year value according to the rule
if int(month) >= 4:
year = str(int(year) - 1)

# Print the modified values
print(f"Modified Year: {year}")
print(f"Prefix1: {prefix1}")
print(f"Prefix2: {prefix2}")
print(f"Month: {month}")
print(f"Prefix3: {prefix3}")
print(f"Sequence: {seq}")
print(f"Suffix: {suffix}")
else:
print("No match found for the sequence.")


Avatar
Descartar
Publicaciones relacionadas Respuestas Vistas Actividad
3
dic 24
10618
1
nov 23
3221
1
ene 24
9899
1
mar 22
5481
2
oct 25
2543