如果在大写字母的前面加上一个小写字母,请插入空格-Python

时间:2020-09-03 02:16:04

标签: python regex string nlp

如果包含空格的大写字母(但不包括首字母),是否可以插入空格?

例如,给定“ RegularExpression” ,我想获取“ Regular Expression”

我尝试了以下正则表达式:

re.sub("[a-z]{1}[A-Z][a-z]{1}", " ","regularExpression") 

不幸的是,这会删除匹配的模式:

regula pression

我希望使用正则表达式解决方案,但对任何可行的解决方案都应多谢。 谢谢!

5 个答案:

答案 0 :(得分:2)

In [1]: s = 'RegularExpression'

In [2]: answer = []

In [3]: breaks = [i for i,char in enumerate(s) if char.isupper()]

In [4]: breaks = breaks[1:]

In [5]: answer.append(s[:breaks[0]])

In [6]: for start,end in zip(breaks, breaks[1:]):
   ...:     answer.append(s[start:end])
   ...:

In [7]: answer.append(s[breaks[-1]:])

In [8]: answer
Out[8]: ['Regular', 'Expression']

In [9]: print(' '.join(answer))
Regular Expression

答案 1 :(得分:1)

您可以执行以下操作:

import re

s = "RegularExpression"
re.sub(r"([A-Z][a-z]+)([A-Z][a-z]+)", r"\1 \2", s)

意思是“在第一个匹配组和第二个匹配组之间留一个空格”,其中匹配组是一个大写字母,后跟一个或多个非大写字母。

答案 2 :(得分:1)

尝试使用Lookbehind "(?<=[a-z])([A-Z])"

例如:

import re

s = "RegularExpression"
print(re.sub(r"(?<=[a-z])([A-Z])", r" \1", s))

输出:

Regular Expression

答案 3 :(得分:1)

据我了解,当大写字母前面带有小写字母时,您希望在它们之间插入一个空格。您可以使用re.sub用空格替换以下正则表达式的(零宽度)匹配项。

r'(?<=[a-z])(?=[A-Z])'

Regex demo << / sup>¯\ (ツ)> Python code

请注意,regex演示链接上的SUBSTITUTION框包含一个空格。

Python的正则表达式引擎执行以下操作。

(?<=[a-z])  : use a positive lookbehind to assert that the match is preceded
              by a lowercase letter
(?=[A-Z])   : use a positive lookahead to assert that the match is followed
              by an uppercase letter

对于字符串'RegularExpression',正则表达式匹配字母'r''E'之间的位置(即零宽度匹配)。

答案 4 :(得分:0)

IIUC,一种使用re.findall的方式:

re.findall("[A-Z][a-z]+", "RegularExpression")

输出:

['Regular', 'Expression']