是否有一个正则表达式可以判断单词的前三个字母,并仅将其拆分为大写字母.然后,它根据大写字母和小写字母拆分单词的其余部分.

For example,
"FORfirstUpload"

Desired output:
['F','O','R','first','Upload']

I tried using the regex pattern: 
re.findall([A-Z][a-z]*|[A-Z]|[a-z])

But got this output:
['F','O','Rfirst','Upload']

推荐答案

因为您只需要三个字母,所以这是一个"强力"解决方案,它显式地查找第一个、第二个和第三个大写前缀字母.假设您的字符串可能不是以单词开头,则使用后视(?<=和词边\b查找起始字母.如果不匹配,则可以将\b替换为^以匹配字符串的开头.

import re
s = 'FORfirstUpload'
re.findall(r'\b[A-Z]|(?<=\b[A-Z])[A-Z]|(?<=\b[A-Z]{2})[A-Z]|[a-z]+|[A-Z][a-z]*', s)
# ['F', 'O', 'R', 'first', 'Upload']

如果Python支持可变长度的后视表达式,这可能会更短,但唉……


就我个人而言,我不会使用单个正则表达式,而是分两次完成:

prefix, rest = re.match(r'\b([A-Z]{,3})(.*)', s).groups()
camel_case_words = re.findall(r'.[a-z]*', rest)
print(list(prefix) + camel_case_words)
# ['F', 'O', 'R', 'first', 'Upload']

Python相关问答推荐

比较两个数据帧并并排附加结果(获取性能警告)

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

可变参数数量的重载类型(args或kwargs)

图像 pyramid .难以创建所需的合成图像

Mistral模型为不同的输入文本生成相同的嵌入

如何在Raspberry Pi上检测USB并使用Python访问它?

为什么抓取的HTML与浏览器判断的元素不同?

如果满足某些条件,则用另一个数据帧列中的值填充空数据帧或数组

名为__main__. py的Python模块在导入时不运行'

如何使用SentenceTransformers创建矢量嵌入?

使用特定值作为引用替换数据框行上的值

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

比Pandas 更好的 Select

处理Gekko的非最优解

提取数组每行的非零元素

pytest、xdist和共享生成的文件依赖项

在round函数中使用列值

python3中np. divide(x,y)和x/y有什么区别?'

用0填充没有覆盖范围的垃圾箱

Match-Case构造中的对象可调用性测试