4 回答

TA貢獻1804條經(jīng)驗 獲得超2個贊
您可以使用捕獲組來re.split
保留分隔符(此處的評論數(shù)):
re.split(r'(\d{1,3}(?:,\d{3})* reviews?)', s)

TA貢獻1811條經(jīng)驗 獲得超6個贊
re.split只需根據(jù)小寫字母后跟數(shù)字或大寫字母之間的邊界拆分使用
>>> import re
>>> re.split(r'(?<=[a-z])(?=\d|[A-Z])', s)
['Eiffel Tower', '140,005 reviews', 'Observation Decks & Towers, Points of Interest & Landmarks']

TA貢獻1836條經(jīng)驗 獲得超3個贊
(.+?)([\d\,]+ reviews)(.*)
這將按以下方式分組。
第 1 組:匹配直到達到數(shù)字后跟“評論”
第 2 組:將數(shù)字(包括逗號)和“評論”匹配到一個字符串中
第 3 組:所有剩余的字符和符號。
Eiffel Tower140,005 reviewsObservation Decks & Towers, Points of Interest & Landmarks
輸出:
['Eiffel Tower', '140,005 reviews', 'Observation Decks & Towers, Points of Interest & Landmarks']
https://regex101.com/r/bDAVNb/2

TA貢獻2065條經(jīng)驗 獲得超14個贊
該解決方案僅適用于該特定句子和遵循相同規(guī)則的其他句子。通過在循環(huán)中添加更多條件,它可以擴展到其他句子結構。對于初學者來說,它比正則表達式更容易閱讀。索引有點麻煩,但這是對您的快速修復。
我注意到拆分發(fā)生在字母和數(shù)字、小寫字母和大寫字母之間。所以你只需要遍歷句子并定義規(guī)則。
s='Eiffel Tower140,005 reviewsObservation Decks & Towers, Points of Interest & Landmarks'
result = []
temp = ''
for i in range(0, len(s)-1):
current_letter = s[i]
next_letter = s[i+1]
if current_letter.islower() and next_letter.isnumeric():
temp += current_letter
result.append(temp)
temp = ''
elif current_letter.islower() and next_letter.isupper():
temp += current_letter
result.append(temp)
temp = ''
else:
temp += current_letter
temp+= s[len(s)-1]
result.append(temp)
print(result)
添加回答
舉報