从字符串中分割数字,也分割联合字符串

时间:2020-08-11 20:34:09

标签: python regex string list

我已经阅读了很多帖子,并找到了部分解决方案,如果没有人能为我提供全面帮助,那将是很棒的选择,因为我找不到解决方案。

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

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 个答案:

答案 0 :(得分:2)

通过re.split,您可以使用捕获组来保存定界符(此处的评论数):

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

答案 1 :(得分:1)

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

答案 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)