我已经阅读了很多帖子,并找到了部分解决方案,如果没有人能为我提供全面帮助,那将是很棒的选择,因为我找不到解决方案。
我有一个句子需要分解成输出格式。应该怎么做?
s='Eiffel Tower140,005 reviewsObservation Decks & Towers, Points of Interest & Landmarks'
现在我希望将输出分为3部分:
地名,评论,详细信息:
输出:
["Eiffel Tower" , "140,005 reviews" ,
"Observation Decks & Towers, Points of Interest & Landmarks"]
答案 0 :(得分:2)
通过re.split
,您可以使用捕获组来保存定界符(此处的评论数):
re.split(r'(\d{1,3}(?:,\d{3})* reviews?)', s)
答案 1 :(得分:1)
(.+?)([\d\,]+ reviews)(.*)
这将以以下方式分组。
Eiffel Tower140,005 reviewsObservation Decks & Towers, Points of Interest & Landmarks
输出:
['Eiffel Tower', '140,005 reviews', 'Observation Decks & Towers, Points of Interest & Landmarks']
答案 2 :(得分:1)
只需使用re.split
根据小写字母后跟数字或大写字母之间的边界进行拆分
>>> import re
>>> re.split(r'(?<=[a-z])(?=\d|[A-Z])', s)
['Eiffel Tower', '140,005 reviews', 'Observation Decks & Towers, Points of Interest & Landmarks']
答案 3 :(得分:1)
此解决方案仅适用于该特定句子和其他遵循相同规则的句子。通过在循环中添加更多条件,可以将其扩展到其他句子结构。对于未入门的人,它比正则表达式更容易阅读。索引有点麻烦,但这是对您的快速修复。
我注意到字母和数字,小写字母和大写字母之间发生了分裂。因此,您只需要遍历句子并定义规则。
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)