在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