从字符串中拆分数字以及拆分关节字符串



我读了很多文章,找到了部分解决方案,如果有人能完全帮助我,那就太好了,因为我找不到解决方案。

我有一句话需要分解成输出格式。应该如何做到这一点?

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

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

地点名称,评论,详细信息:

输出:

["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组:匹配直到达到后面跟有"0"的数字;评论">
  • 组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', '140,005 reviews', 'Observation Decks & Towers, Points of Interest & Landmarks']

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

我注意到字母&数字和小写字母&大写字母。所以你只需要在句子中循环并定义规则。

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)

最新更新