为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容708150 2023-05-16 09:53:30
我已经阅读了很多帖子并找到了部分解决方案,如果有人能完全帮助我,那就太好了,因为我找不到解决方案。我有一个句子需要分解成输出格式。那应该怎么做呢?s='Eiffel Tower140,005 reviewsObservation Decks & Towers, Points of Interest & Landmarks'现在我想要这样的输出分为 3 个部分:地名、评论、详情:输出:["Eiffel Tower" , "140,005 reviews" ,  "Observation Decks & Towers, Points of Interest & Landmarks"]
查看完整描述

4 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

您可以使用捕获组来re.split保留分隔符(此处的评论数):

re.split(r'(\d{1,3}(?:,\d{3})* reviews?)', s)


查看完整回答
反对 回复 2023-05-16
?
杨魅力

TA贡献1811条经验 获得超5个赞

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



查看完整回答
反对 回复 2023-05-16
?
米脂

TA贡献1836条经验 获得超3个赞

(.+?)([\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


查看完整回答
反对 回复 2023-05-16
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

该解决方案仅适用于该特定句子和遵循相同规则的其他句子。通过在循环中添加更多条件,它可以扩展到其他句子结构。对于初学者来说,它比正则表达式更容易阅读。索引有点麻烦,但这是对您的快速修复。


我注意到拆分发生在字母和数字、小写字母和大写字母之间。所以你只需要遍历句子并定义规则。


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)


查看完整回答
反对 回复 2023-05-16
  • 4 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信