gpt4 book ai didi

regex - 在大写字母前插入空格但不在缩写之间插入空格的 pythonic 方法

转载 作者:行者123 更新时间:2023-12-02 02:44:25 24 4
gpt4 key购买 nike

我有一个文件,我正在通过 python 脚本更改其格式。我在这个文件中有几个驼峰式字符串,我只想在大写字母前插入一个空格 - 所以“WordWordWord”变成“Word Word Word”,但我也有一些缩写,比如文本“General Manager or副总裁”。

我在这篇文章中找到了 David Underhill 的回答:

A pythonic way to insert a space before capital letters

虽然这个答案帮助我不要在文本中的缩写之间插入空格,例如“DaveIsAFKRightNow!Cool”

但它肯定会在“VP”中的 V 和 P 之间插入一个空格。

我只有 25 点经验,我无法对现有帖子发表评论,我别无选择,只能为此类类似问题创建另一个帖子。

我不太擅长 RegEx,也不知道如何处理这种情况。

我试过这个:

re_outer = re.compile(r'([^A-Z ])([A-Z])')
re_inner = re.compile(r'(?<!^)([A-Z])([^A-Z])')
re_outer.sub(r'\1 \2', re_inner.sub(r' \1\2', 'DaveIsAFKRightNow!Cool'))

它给了我‘戴夫现在离开了!酷'

我的文本示例是这样的:

General Manager or VP Torrance, CARequired education

我希望输出为:General Manager or VP Torrance, CA Required education

我得到的输出是:General Manager or V P Torrance, CA Required education

最佳答案

您可以交换替换以首先在大写字母之前插入空格,这些字母前面是除大写字母和空格之外的字符,然后在以 1+ 个大写字母开头,后跟一个大写字母和一个小写字母的单词之前附加一个空格信件:

import re
re_outer = re.compile(r'([^A-Z ])([A-Z])')
re_inner = re.compile(r'\b[A-Z]+(?=[A-Z][a-z])')
print(re_inner.sub(r'\g<0> ', re_outer.sub(r'\1 \2', 'DaveIsAFKRightNow!Cool')))
# => Dave Is AFK Right Now! Cool
print(re_inner.sub(r'\g<0> ', re_outer.sub(r'\1 \2', 'General Manager or VP Torrance, CARequired education')))
# => General Manager or VP Torrance, CA Required education

参见 Python demo

\b[A-Z]+(?=[A-Z][a-z])正则表达式匹配

  • \b - 单词边界
  • [A-Z]+ - 1+ 个大写字母是
  • (?=[A-Z][a-z]) - 后跟一个大写字母和一个小写字母。

请注意 \g<0>在替换模式中插入整个匹配项。

关于regex - 在大写字母前插入空格但不在缩写之间插入空格的 pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56342930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com