python - 有没有办法替换长度超过X位的单词的最后N个字母?

标签 python python-3.x regex

有谁知道如何替换长度超过 X 位的单词的最后 N 个字母? 我正在使用此代码

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

它会在大于 7 个字母的单词周围添加 []。 但是,我只需要包装最后一个字母,而不是整个单词。有谁知道如何实现这一目标? 这是我的预期输出:

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].

最佳答案

您可以使用此正则表达式进行搜索:

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

并使用:\1[\2]进行替换。

RegEx Demo

代码:

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))

输出:

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].

正则表达式详细信息:

  • (\b\w{6,}):匹配捕获组 #1 中后跟 6 个以上单词字符的单词边界
  • (\w):匹配捕获组 #2 中的最后一个单词
  • \1[\2]:替换为将第一个捕获组置于 [.]
  • 中,后跟最后一个单词

关于python - 有没有办法替换长度超过X位的单词的最后N个字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72833762/

相关文章:

Python将字节串写入文件

sprintf 的 Python 等价物

python - 在 Jupyter Notebook 中导入期间找不到模块

regex - 如果不匹配正则表达式,则从文件中删除行

java - 用于避免基本数学运算符的正则表达式

python - 如何在 Pytorch 中可视化网络?

python - 如何将两个相似的嵌套字典合并为一个,每个字典都有一些共享和唯一的嵌套元素(Python)?

python-3.x - 当默认加载程序已经变得更加安全时,为什么PyYAML 5.1会引发YAMLLoadWarning?

Python - 将行拆分为列 - csv 数据

尝试浏览大型列表时出现 Python IndexError