Replace list with pattern in regex

0

Personally I need to transform a string into a list, in a peculiar way.

I found in this post what I need to do. But I'm lost to the applied regex.

I have numerous string in the following format:

["DECRETO Nº  76.326 DE 23 DE SETEMBRO DE 1975.",   
'DECRETO Nº  76.326, DE 23 DE SETEMBRO DE 1975.',
'DECRETO-LEI Nº  76.326 DE 23 DE SETEMBRO DE 1975.',
'LEI Nº 76.326 DE 23 DE SETEMBRO DE 1975.',
"Decreto Nº  76.326 DE 23 DE SETEMBRO DE 1975",
"Decreto Nº 76.326 de 23 DE Setembro de 1975.",
"DECRETO - LEI Nº  76.326 DE 23 DE SETEMBRO DE 1975.",
"DECRETO- LEI Nº  76.326 DE 23 DE SETEMBRO DE 1975.",
"DECRETO -LEI Nº  76.326 DE 23 DE SETEMBRO DE 1975."]

My ultimate goal is to transform them so they look like this:

"DECRETO-LEI Nº 76.326, DE 23 DE SETEMBRO DE 1975" ou

"DECRETO Nº 76.326, DE 23 DE SETEMBRO DE 1975" ou

"LEI Nº 76.326, DE 23 DE SETEMBRO DE 1975"

I thought of turning them into a list with regex and join to return the string, but I think there could be a simpler way.

def truncus22():
    ''''''
    s = 'DECRETO-LEI nº  76.326 De 23 de setembro de 1975.'
    s = re.sub('\.$', '', re.sub('  ', ' ', s))
    return ', '.join(re.split("(?<!^)\s+(?=D)(?!.\s)", s)).upper()

Look here folks an example that I had thought. But it works only in 01 of the cases presented ...

I need to edit the original string by removing duplicate spaces, adding a comma before the date, removing spaces in the hyphen, and the end point of all strings

    
asked by anonymous 08.07.2018 / 20:56

2 answers

1
  

edit the original string, removing the duplicate spaces,   add comma before date, remove spaces in the hyphen, and point   end of all strings.

To resolve Regular Expressions , the removal of characters (whitespace and period) is separated from the insertion of characters (comma).

Regex

Remove characters

The following regular expression is used to check for multiple spacing, hyphen spacing, and end point:

\s+(?=\s|-)|(?<=-)\s+|\.$

And the demo in Regex101 can be seen in the link.

Add Characters

The following regular expression is used to check the date and insert the comma:

(?<!,)\s(?=de\s\d{1,2}\sde\s[a-zç]+\sde\s\d{4}) with the flag IGNORECASE

And the demo on Regex101 can be seen here.

Code

# coding=utf-8
import re


frases =   ["DECRETO Nº  76.326 DE 23 DE SETEMBRO DE 1975.",
            'DECRETO Nº  76.326, DE 23 DE SETEMBRO DE 1975.',
            'DECRETO-LEI Nº  76.326 DE 23 DE SETEMBRO DE 1975.',
            'LEI Nº 76.326 DE 23 DE SETEMBRO DE 1975.',
            "Decreto Nº  76.326 DE 23 DE SETEMBRO DE 1975",
            "Decreto Nº 76.326 de 23 DE Setembro de 1975.",
            "DECRETO - LEI Nº  76.326 DE 23 DE SETEMBRO DE 1975.",
            "DECRETO- LEI Nº     76.326 DE 23 DE SETEMBRO DE 1975.",
            "DECRETO -LEI Nº  76.326 DE 23 DE SETEMBRO DE 1975."]

print """
VERIFICAÇÃO DE ESPAÇOS EXTRAS (2 ou mais) ou espaçamento do hífem OU PONTO FINAL
https://regex101.com/r/SVEi1X/3
"""

padrao_regex = re.compile(r"\s+(?=\s|-)|(?<=-)\s+|\.$")
substituicoes = [re.sub(padrao_regex, "", frase) for frase in frases]
if substituicoes:
    for substituicao in substituicoes:
        print substituicao

print """
VERIFICAÇÃO DE DATAS
https://regex101.com/r/SVEi1X/5
"""

padrao_regex = re.compile(r"(?<!,)\s(?=\d{1,2}\sde\s[a-zç]+\sde\s\d{4})", re.IGNORECASE)
resultados = [re.sub(padrao_regex, ", ", substituicao) for substituicao in substituicoes]
if resultados:
    for resultado in resultados:
        print resultado

Where Regex overrides are looped in the lists as follows: [re.sub(padrao_regex, "caractere de substituição", item) for item in lista]

Result

VERIFICAÇÃO DE ESPAÇOS EXTRAS (2 ou mais) ou espaçamento do hífem OU PONTO FINAL
https://regex101.com/r/SVEi1X/3

DECRETO Nº 76.326 DE 23 DE SETEMBRO DE 1975
DECRETO Nº 76.326, DE 23 DE SETEMBRO DE 1975
DECRETO-LEI Nº 76.326 DE 23 DE SETEMBRO DE 1975
LEI Nº 76.326 DE 23 DE SETEMBRO DE 1975
Decreto Nº 76.326 DE 23 DE SETEMBRO DE 1975
Decreto Nº 76.326 de 23 DE Setembro de 1975
DECRETO-LEI Nº 76.326 DE 23 DE SETEMBRO DE 1975
DECRETO-LEI Nº 76.326 DE 23 DE SETEMBRO DE 1975
DECRETO-LEI Nº 76.326 DE 23 DE SETEMBRO DE 1975

VERIFICAÇÃO DE DATAS
https://regex101.com/r/SVEi1X/5

DECRETO Nº 76.326, DE 23 DE SETEMBRO DE 1975
DECRETO Nº 76.326, DE 23 DE SETEMBRO DE 1975
DECRETO-LEI Nº 76.326, DE 23 DE SETEMBRO DE 1975
LEI Nº 76.326, DE 23 DE SETEMBRO DE 1975
Decreto Nº 76.326, DE 23 DE SETEMBRO DE 1975
Decreto Nº 76.326, de 23 DE Setembro de 1975
DECRETO-LEI Nº 76.326, DE 23 DE SETEMBRO DE 1975
DECRETO-LEI Nº 76.326, DE 23 DE SETEMBRO DE 1975
DECRETO-LEI Nº 76.326, DE 23 DE SETEMBRO DE 1975
    
12.07.2018 / 16:33
0
Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> lei = ["lei n32 .....", "lei n43 ....."]
>>> lei[1]
'lei n43 .....'
>>> lei[0]
'lei n32 .....'
>>> lei1 = lei[0]
>>> lei1
'lei n32 .....'
>>> lei2 = lei[1]
>>> lei2
'lei n43 .....'
>>> 

With the example above, it treats the variable law as array , so it is only necessary to ask lei[indice] and it will return the value in the indice position or even pass the value of lei[indice] to a variable common.

    
08.07.2018 / 23:01