我有很多字符串列表,我已经抓取并解析了,我想在这些列表中使用正则表达式找到某些字符串。我想要的每个字符串都不同,但它们在列表中按顺序出现。即我喜欢的第一个字符串将始终出现在第二个字符串之前,第二个字符串将出现在第三个字符串之前,依此类推。但是,我不能只使用索引,因为两者之间的元素数量因列表而异。
实施例。说我把这些字符串写下来并存储在以下列表中:
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)
答案 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')