在Python中有什么办法可以做到以下几点?我有一个像"Trip HopDowntempoSynth-pop"
这样的字符串,我可以在大写字符上分割,但是我想要的是以大写字母分割,除非在空格之前。正则表达式以大写字母拆分,但如果以空格开头,则不会。
我尝试添加一个!
到:在我放置在除了
print (re.findall(r'[A-Z](?:A-Z*(?![a-z])|[a-z]*)',line))
与没有区别。
在Python中有什么办法可以做到以下几点?我有一个像"Trip HopDowntempoSynth-pop"
这样的字符串,我可以在大写字符上分割,但是我想要的是以大写字母分割,除非在空格之前。正则表达式以大写字母拆分,但如果以空格开头,则不会。
我尝试添加一个!
到:在我放置在除了
print (re.findall(r'[A-Z](?:A-Z*(?![a-z])|[a-z]*)',line))
与没有区别。
你的意思是这样的吗?
re.split('\s+(?=[A-Z])', "Trip HopDowntempoSynth-pop")
# ['Trip', 'HopDowntempoSynth-pop']
或者相反:
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']
我相信他们想要的是相反的;你的例子只是分割那些空格前面的大写字符。 OP想要分割所有大写字符前面没有空格 – Hamms
@Hamms是的,我也加了相反的意思。 –
潜在迂回,但取得的成绩,我认为你是通过迭代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']
实际上,这假定大写字母必须以小写字母开头,或者可以使用'pattern = re.compile(“[^ \ s] [A-Z]”) – caw5cv
这不是一个正则表达式,但它很容易适合您的问题。
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)
它打印出一个数组,看起来像这样:
[ '神游舞曲', '缓拍', '合成器流行']
你可以添加你想要的输出? –
Findall和split是不同的东西。它也似乎你想分裂的空格后面是大写,而不是大写。你能举一个例子输入和输出吗?你可能需要一个像:'tweets_file = open('tweets.txt',“r”))'''''''aaa','BcccDeee qqqq 9.','Fggg','HiiiJeee']' – tdelaney
例如,以大写字母开头而不是前面的空格是're.split(“(?<!)[AZ]”,“Trip HopDowntempoSynth-pop”)'这会导致'['','rip Hop','owntempo' ,'yyp-pop']'。我们需要几个示例输入和输出,以便我们能够找出各种条件。 – tdelaney