Default list replacement in regex

Asked

Viewed 217 times

0

People need to turn a string into a list, in a peculiar way.

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

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 turn them so they stay that way:

"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 believe there may 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 personal an example I had thought of. But it only works 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 endpoint of all strings

  • What exactly changes from the first list to the second? Spaces and comma?

  • @Andersoncarloswoss, yes, sir. need to edit the original string by removing duplicate spaces, adding a comma before the date, removing spaces in the hyphen, and the endpoint of all strings.

2 answers

1


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

To solve with Regular Expressions, the deletion of characters (blank and dot) is separated from the insertion of characters (comma).

Regex

Remove characters

The following regular expression is used to check multiple spacing, hyphen spacing and endpoint:

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

And the demo on 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 IGNORECASE flag

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 substitutions by Regex are performed with a loop in the lists as follows: [re.sub(padrao_regex, "caractere de substituição", item) for item in lista]

Upshot

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

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 above example it treats the variable law as array, so all you have to do is ask lei[indice] and it will return the value in position indice or pass the value of lei[indice] for a common variable.

  • It was worth more, The goal is not to take the elements of the array, but to format them so that they remain as in the final goal.

  • See if this link helps you https://answall.com/questions/124088/remover-score%C3%A7%C3%A3o-e-s%C3%Admbolos-em-python

  • To take the point at the end, fine. But as for putting the comma after the numbering and before the date, in the strings?

  • @britodfbr Your question is unclear, edit it again. Please create a [mcve] for the question. Because the question is too wide and when you are more specific, there are more chances of your question being answered correctly.

  • @danieltakeshi, what can I improve on the question? I showed you what I have, that in this case I pasted the different strings in a list. And then the expected goal. ...

  • 1

    @britodfbr I found it confusing because you said "I need to turn a string into a list", but at the end it seems that you have lists and want to turn into a string and then go back to the list? I was confused. And it seems to me that it is not necessary to regex.

  • @danieltakeshi, I have strings in the format I present in the first list, are the possible possibilities that there are, as slight differences between them. And I need to format them by inserting a comma before the date and removing the endpoint after the year.

  • I understood your goal, well, I gave you this example of showing the phrases and the link with using chr_remove() follow this other link http://blog.evaldojunior.com.br/aulas/python/2008/11/30/curso-de-python-aula-6-um-pouco-more-about-strings.html I think if you put all this together... you arrive at your result.\

  • Practically treat the string as multi-position char

Show 4 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.