在Python中有没有办法做到以下几点?我有一个像"Trip HopDowntempoSynth-pop"
这样的字符串,我可以拆分大写字符,但我想要的是拆分大写,除非前面有空格。
我尝试将!
添加到:
print (re.findall(r'[A-Z](?:A-Z*(?![a-z])|[a-z]*)',line))
我添加的位置没有区别。
答案 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']