如何解决从字符串中分割数字,也分割联合字符串
我已经阅读了很多帖子,并找到了部分解决方案,如果没有人能为我提供全面帮助,那将是很棒的选择,因为我找不到解决方案。
我有一个句子需要分解成输出格式。应该怎么做?
s='Eiffel Tower140,005 reviewsObservation Decks & Towers,Points of Interest & Landmarks'
现在我希望将输出分为3部分:
地名,评论,详细信息:
输出:
["Eiffel Tower","140,005 reviews","Observation Decks & Towers,Points of Interest & Landmarks"]
解决方法
通过re.split
,您可以使用捕获组来保存定界符(此处的评论数):
re.split(r'(\d{1,3}(?:,\d{3})* reviews?)',s)
,
(.+?)([\d\,]+ reviews)(.*)
这将以以下方式分组。
- 第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
,只需使用re.split
根据小写字母后跟数字或大写字母之间的边界进行拆分
>>> import re
>>> re.split(r'(?<=[a-z])(?=\d|[A-Z])',s)
['Eiffel Tower',Points of Interest & Landmarks']
,
此解决方案仅适用于该特定句子和其他遵循相同规则的句子。通过在循环中添加更多条件,可以将其扩展到其他句子结构。对于未入门的人,它比正则表达式更容易阅读。索引有点麻烦,但这是对您的快速修复。
我注意到字母和数字,小写字母和大写字母之间发生了分裂。因此,您只需要遍历句子并定义规则。
s='Eiffel Tower140,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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。