如何在单词中搜索特定的字符串

时间:2019-05-19 17:57:59

标签: python-3.x

我有:

  1. 包含一定数量代码的列表
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)

预先感谢您的任何建议

1 个答案:

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