拆分包含标题的字符串的最佳方法
Best way to split a string that has titles in it
这是我的字符串:
data = '2.5 Excavation et terrassement 2.7 Travaux d'emplacement 3.2 Petits ouvrages de béton 4.2 Travaux de maçonnerie non structurale marbre et céramique 5.2 Ouvrages métalliques 6.2 Travaux de bois et plastique 7 Isolation étanchéité couvertures et revêtement extérieur 8 Portes et fenêtres 9 Travaux de finition 11.2 Équipements et produits spéciaux 12 Armoires et comptoirs usinés 13.5 Installations spéciales ou préfabriquées 15.6 Propane 17.2 Intercommunication téléphonie et surveillance'
我希望结果是:
list = ['2.5 Excavation et terrassement', '2.7 Travaux d'emplacement', '3.2 Petits ouvrages de béton',...]
提前致谢。
您可以使用 re.findall
:
print(re.findall(r'\d[\d.]*\D+[^\s\d]', data))
解释:
\d[\d.]*
将匹配一个数字后跟任意数量(包括零)的数字和点
\D+
将匹配一个或多个 non-digit 个字符
[^\s\d]
确保匹配不会以 space(相当于剥离)或数字(属于下一个标题) 结尾
编辑:这不是 fool-proof,因为标题中出现的任何数字都将被识别为新标题的开头(很难避免,因为您的标题 # 类似于 8 或 9...)
您可以使用 re.split() 来处理数字前面的 space 作为分隔符:
import re
print(re.split(r' (?=\d)',data))
(?=\d)
部分是前瞻性的,确保只有 space 后跟数字的部分将被视为分隔符。
输出:
['2.5 Excavation et terrassement',
"2.7 Travaux d'emplacement",
'3.2 Petits ouvrages de béton',
'4.2 Travaux de maçonnerie non structurale marbre et céramique',
'5.2 Ouvrages métalliques',
'6.2 Travaux de bois et plastique',
'7 Isolation étanchéité couvertures et revêtement extérieur',
'8 Portes et fenêtres',
'9 Travaux de finition',
'11.2 Équipements et produits spéciaux',
'12 Armoires et comptoirs usinés',
'13.5 Installations spéciales ou préfabriquées',
'15.6 Propane',
'17.2 Intercommunication téléphonie et surveillance']
这是我的字符串:
data = '2.5 Excavation et terrassement 2.7 Travaux d'emplacement 3.2 Petits ouvrages de béton 4.2 Travaux de maçonnerie non structurale marbre et céramique 5.2 Ouvrages métalliques 6.2 Travaux de bois et plastique 7 Isolation étanchéité couvertures et revêtement extérieur 8 Portes et fenêtres 9 Travaux de finition 11.2 Équipements et produits spéciaux 12 Armoires et comptoirs usinés 13.5 Installations spéciales ou préfabriquées 15.6 Propane 17.2 Intercommunication téléphonie et surveillance'
我希望结果是:
list = ['2.5 Excavation et terrassement', '2.7 Travaux d'emplacement', '3.2 Petits ouvrages de béton',...]
提前致谢。
您可以使用 re.findall
:
print(re.findall(r'\d[\d.]*\D+[^\s\d]', data))
解释:
\d[\d.]*
将匹配一个数字后跟任意数量(包括零)的数字和点\D+
将匹配一个或多个 non-digit 个字符[^\s\d]
确保匹配不会以 space(相当于剥离)或数字(属于下一个标题) 结尾
编辑:这不是 fool-proof,因为标题中出现的任何数字都将被识别为新标题的开头(很难避免,因为您的标题 # 类似于 8 或 9...)
您可以使用 re.split() 来处理数字前面的 space 作为分隔符:
import re
print(re.split(r' (?=\d)',data))
(?=\d)
部分是前瞻性的,确保只有 space 后跟数字的部分将被视为分隔符。
输出:
['2.5 Excavation et terrassement',
"2.7 Travaux d'emplacement",
'3.2 Petits ouvrages de béton',
'4.2 Travaux de maçonnerie non structurale marbre et céramique',
'5.2 Ouvrages métalliques',
'6.2 Travaux de bois et plastique',
'7 Isolation étanchéité couvertures et revêtement extérieur',
'8 Portes et fenêtres',
'9 Travaux de finition',
'11.2 Équipements et produits spéciaux',
'12 Armoires et comptoirs usinés',
'13.5 Installations spéciales ou préfabriquées',
'15.6 Propane',
'17.2 Intercommunication téléphonie et surveillance']