我有:
list1 = ['A1', 'A2.1', 'A2.2','A2.3','A2.4','B1.1','B1.2','B1.3','B1.4','B1.5','B1.6','B1.7','B1.8a','B1.8b','B2.1','B2.2','B2.3','B2.4','B2.5','B2.6','B2.7','B2.8','B2.9','B2.10','B2.11','B2.12','B2.13','B2.14','B2.15','B2.16','B2.17','B2.18','B2.19','B2.20a','B2.20b','B2.20c']
(这是整个列表的一部分) 2.以及该字符串
string1 = "A1Contributo pubblico1559.020• 559.020,00A2.2Cofinanziamentoprivato in denaro122.500• 22.500,00A2.4Entrate generate dalprogetto00• 0,00B2.20aLocali: locazioni eutenze00• 0,00B2.20bImmobili:ammortamenti00• 0,00B2.20cImmobili:manutenzioneordinaria00• 0,00B2.21Attrezzature: noleggi eleasing00• 0,00B2.22Attrezzature:manutenzioni ordinarie00• 0,00B2.23Attrezzature:ammortamenti00• 0,00B2.1Docenza (dipendenti ecollaboratori)00• 0,00B2.14Viaggi di studio deipartecipanti00• 0,00B2.18Materiali diconsumo/materialididattici00• 0,00E1.1UCS ora formazione5.94085• 504.900,00E1.2UCS allievo120403,5• 48.420,00E1.3Costi acofinanziamentoprivato150150• 22.500,00E1.4UCS ora/utente(individuale)15038• 5.700,00"
我想验证list1中的元素是否包含在string1中以及它们在字符串中的位置。
我的最终目标是从字符串中提取每个代码的相对数量,例如代码“ A1”-> 559.020,00,代码“ A2.2”-> 22.500,00,依此类推。>
起初,我尝试了一个简单的方法:
for code in list1:
stringPosition = re.search(code, string1)
但是使用这种解决方案,我遇到了代码B2.2,B2.20的问题,因为我找到了相同的位置。
所以我试图了解如何在字符串中搜索确切的代码。我看到了这些帖子:
How do I check for an EXACT word in a string in python
Match exact phrase within a string in Python
Regex find whole substring between parenthesis containing exact substring
How to search for a word (exact match) within a string?
并且我尝试应用建议的解决方案(例如,使用r'\ w'+(代码)+ r'\ w'),但没有成功。
我的第一次尝试:
for code in list1:
stringPosition = re.search(code, string1)
if stringPosition != None:
print(code, stringPosition)
list2.append(stringPosition)
预先感谢您的任何建议
答案 0 :(得分:1)
您可以使用正确的正则表达式来实现:
sequences
由于我不确定您到底想要什么,因此我将三个步骤明确分开:
匹配正则表达式后,您将得到所需的内容
matches = [('A1','559.020,00'),('A2.2','22 .500,00'),('A2.4','0,00'),('B2。 20a','0,00'),('B2.20b','0,00'),('B2.20c','0,00'),('B2.21','0,00' ),('B2.22','0,00'),('B2.23','0,00'),('B2.1','0,00'),('B2.14' ,'0,00'),('B2.18','0,00'),('E1.1','504.900,00'),('E1.2','48.420,00'), ('E1.3','22 .500,00'),('E1.4','5.700,00')]
仅当您获得列表中具有的代码时才被过滤(注意,区别在于B2.21-23和所有E代码,因为它们不在您的列表中)
已过滤= [('A1','559.020,00'),('A2.2','22 .500,00'),('A2.4','0,00'),('B2。 20a','0,00'),('B2.20b','0,00'),('B2.20c','0,00'),('B2.1','0,00' ),('B2.14','0,00'),('B2.18','0,00')]
将值转换为浮点型,您需要删除该第一点并将逗号更改为一个点
number_filtered = [('A1',559020.0),('A2.2',22500.0),('A2.4',0.0),('B2.20a',0.0),('B2.20b' ,0.0),('B2.20c',0.0),('B2.1',0.0),('B2.14',0.0),('B2.18',0.0)]