Python:如何有效地继续在列表中搜索不同的元素?

时间:2016-11-17 15:16:01

标签: python regex list loops pointers

我有很多字符串列表,我已经抓取并解析了,我想在这些列表中使用正则表达式找到某些字符串。我想要的每个字符串都不同,但它们在列表中按顺序出现。即我喜欢的第一个字符串将始终出现在第二个字符串之前,第二个字符串将出现在第三个字符串之前,依此类推。但是,我不能只使用索引,因为两者之间的元素数量因列表而异。

实施例。说我把这些字符串写下来并存储在以下列表中:

personal_info = ["Name: John Doe", "Wife: Jane Doe", "Children: Jenny Doe", "Children: Johnny Doe", "Location: US", "Accounts: BoA", "Accounts: Chase", "House: Own", "Car: Own", "Other: None"]

personal_info2 = ["Name: James Lee", "Location: CAN", "Accounts: Citibank", "House: Rent", "Car: Own", "Other: None"]

我想抓住以Name,Location和House开头的元素,它们之间可能有也可能没有多个元素。位置将始终位于姓名和住宅之后将始终位于位置之后。

因为我会在许多列表中重复此操作,我想使用第一个正则表达式进行搜索,然后继续使用我离开的下一个正则表达式进行搜索,因为我知道它们出现了顺序。有没有简洁的方法在Python中做到这一点?现在我现在有一组for循环,在匹配时中断,然后记录索引以传递给下一个for循环。

如果必须显示:

idx = 0 for string in string_list: idx +=1 if re.search('pattern', string) is not None: string_one = re.search('pattern', string).group(0)

2 个答案:

答案 0 :(得分:0)

打印您请求的字段的简短代码:

x=["Name", "Location", "House"]
y=iter(x)
z=y.next()
for a in personal_info:
    if a.startswith(z):
        print a
        try:
            z=y.next()
        except StopIteration:
            break

你可以替换" startswith"使用正则表达式," print"与任何其他行动。

答案 1 :(得分:0)

您可以使用索引计数器来跟踪您要检查的条件:

conditions = [("Name", "John Doe"), ("Location", "US")]
condition_index = 0

for index, i in enumerate(personal_info):
    j1, j2 = conditions[condition_index]
    if j1 in i or j2 in i:
        print "List idx", index, i, "Condition", (j1, j2)
        condition_index += 1
        if condition_index == len(conditions):
            break

>>>List idx 0 Name: John Doe Condition ('Name', 'John Doe')
List idx 4 Location: US Condition ('Location', 'US')