正则表达式分裂大写但不是如果前面有空格?

时间:2017-04-18 00:51:12

标签: python regex split

在Python中有没有办法做到以下几点?我有一个像"Trip HopDowntempoSynth-pop"这样的字符串,我可以拆分大写字符,但我想要的是拆分大写,除非前面有空格。

我尝试将!添加到:

print (re.findall(r'[A-Z](?:A-Z*(?![a-z])|[a-z]*)',line))

我添加的位置没有区别。

3 个答案:

答案 0 :(得分:1)

你的意思是这样吗?

pattern = re.compile('[A-Z][^A-Z\s]+(?:\s+\S[^A-Z\s]*)*')

pattern.findall("Trip HopDowntempoSynth-pop")
# ['Trip Hop', 'Downtempo', 'Synth-pop']

pattern.findall("Trip Hop HHopDowntempoSynth-pop")
#['Trip Hop H', 'Hop', 'Downtempo', 'Synth-pop']

或相反:

database.each

答案 1 :(得分:0)

潜在的回旋,但是通过迭代re.findall并使用re.sub将匹配替换为占位符字符然后拆分来实现我认为你正在寻找的东西......

import re
s = "Trip HopDowntempoSynth-pop"

pattern = re.compile("[a-z][A-Z]")

matches = re.findall(pattern, s)

for match in matches:
    match_replacer = match[0] + '|' + match[1]
    s = s.replace(match, match_replacer)


s.split('|')

给出输出

['Trip Hop', 'Downtempo', 'Synth-pop']

答案 2 :(得分:0)

这不是一个正则表达式,但它很容易适应你的问题。

s = "Trip HopDowntempoSynth-pop"

arr = []
word = s[0]
for i in range(1, len(s)):
    if s[i].isupper():
        if s[i - 1] == " ":
            word += s[i]
        else:
            arr.append(word)
            word = s[i]
    else:
        word += s[i]
arr.append(word)

print(arr)

它打印出一个如下所示的数组:

[' Trip Hop',' Downtempo',' Synth-pop']