Home > database >  Is there a way to replace the last N letters of words longer than X digits?
Is there a way to replace the last N letters of words longer than X digits?

Time:07-02

Does anyone know how can I replace the last N letters of words longer than X digits? I'm using this code

text = re.sub("[A-ZÀ-ÖØ-Ýà-öø-ÿa-z][A-ZÀ-ÖØ-Ýà-öø-ÿa-z]{7,}", "[\g<0>]", text)

This is an example output string of what I'm getting now.

253.  Ficam [revogadas] a Lei nº 1.711, de 28 de outubro de 1952, e [respectiva] [legislação] [complementar], bem como as demais [disposições] em [contrário].

It puts a [] around words that are greater than 7 letters. However, I just need to wrap the last letter, not the whole word. Does anyone know how to achieve this? This is my expected output:

253.  Ficam revogada[s] a Lei nº 1.711, de 28 de outubro de 1952, e respectiv[a] legislaçã[o] complement[r], bem como as demais disposiçõe[s] em contrári[o].

CodePudding user response:

You may use this regex for search:

(\b\w{6,})(\w)

And use: \1[\2] for replacement.

RegEx Demo

Code:

import re
text = '253.  Ficam revogadas a Lei nº 1.711, de 28 de outubro de 1952, e respectiva legislação complementar, bem como as demais disposições em contrário.'

print (re.sub(r'(\b\w{6,})(\w)', r'\1[\2]', text))

Output:

253. Ficam revogada[s] a Lei nº 1.711, de 28 de outubr[o] de 1952, e respectiv[a] legislaçã[o] complementa[r], bem como as demais disposiçõe[s] em contrári[o].

RegEx Details:

  • (\b\w{6,}): Match word boundary followed by 6 word characters in capture group #1
  • (\w): Match last word in capture group #2
  • \1[\2]: Replacement to put first capture group followed by last word wrapped in [.]
  • Related