4 回答
TA贡献1804条经验 获得超2个赞
您可以使用捕获组来re.split
保留分隔符(此处的评论数):
re.split(r'(\d{1,3}(?:,\d{3})* reviews?)', s)
TA贡献1811条经验 获得超6个赞
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']
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
TA贡献2065条经验 获得超14个赞
该解决方案仅适用于该特定句子和遵循相同规则的其他句子。通过在循环中添加更多条件,它可以扩展到其他句子结构。对于初学者来说,它比正则表达式更容易阅读。索引有点麻烦,但这是对您的快速修复。
我注意到拆分发生在字母和数字、小写字母和大写字母之间。所以你只需要遍历句子并定义规则。
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)
添加回答
举报