从字符串中拆分数字并拆分联合字符串

我已经阅读了很多帖子并找到了部分解决方案,如果有人能完全帮助我,那就太好了,因为我找不到解决方案。

我有一个句子需要分解成输出格式。那应该怎么做呢?

s='Eiffel Tower140,005 reviewsObservation Decks & Towers, Points of Interest & Landmarks'

现在我想要这样的输出分为 3 个部分:

地名、评论、详情:

输出:

["Eiffel Tower" , "140,005 reviews" , 
"Observation Decks & Towers, Points of Interest & Landmarks"]


慕容708150
浏览 164回答 4
4回答

慕婉清6462132

您可以使用捕获组来re.split保留分隔符(此处的评论数):re.split(r'(\d{1,3}(?:,\d{3})* reviews?)', s)

杨魅力

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']

米脂

(.+?)([\d\,]+ reviews)(.*)&nbsp;这将按以下方式分组。第 1 组:匹配直到达到数字后跟“评论”第 2 组:将数字(包括逗号)和“评论”匹配到一个字符串中第 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

翻翻过去那场雪

该解决方案仅适用于该特定句子和遵循相同规则的其他句子。通过在循环中添加更多条件,它可以扩展到其他句子结构。对于初学者来说,它比正则表达式更容易阅读。索引有点麻烦,但这是对您的快速修复。我注意到拆分发生在字母和数字、小写字母和大写字母之间。所以你只需要遍历句子并定义规则。s='Eiffel Tower140,005 reviewsObservation Decks & Towers, Points of Interest & Landmarks'result = []temp = ''for i in range(0, len(s)-1):&nbsp; &nbsp; current_letter = s[i]&nbsp; &nbsp; next_letter = s[i+1]&nbsp; &nbsp; if current_letter.islower() and next_letter.isnumeric():&nbsp; &nbsp; &nbsp; &nbsp; temp += current_letter&nbsp; &nbsp; &nbsp; &nbsp; result.append(temp)&nbsp; &nbsp; &nbsp; &nbsp; temp = ''&nbsp; &nbsp; elif current_letter.islower() and next_letter.isupper():&nbsp; &nbsp; &nbsp; &nbsp; temp += current_letter&nbsp; &nbsp; &nbsp; &nbsp; result.append(temp)&nbsp; &nbsp; &nbsp; &nbsp; temp = ''&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; temp += current_lettertemp+= s[len(s)-1]result.append(temp)print(result)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python