如果包含空格的大写字母(但不包括首字母),是否可以插入空格?
例如,给定“ RegularExpression” ,我想获取“ Regular Expression” 。
我尝试了以下正则表达式:
re.sub("[a-z]{1}[A-Z][a-z]{1}", " ","regularExpression")
不幸的是,这会删除匹配的模式:
regula pression
我希望使用正则表达式解决方案,但对任何可行的解决方案都应多谢。 谢谢!
答案 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']