【发布时间】:2016-11-17 15:16:00
【问题描述】:
我有很多我已经抓取和解析的字符串列表,我想使用正则表达式在这些列表中找到某些字符串。我想要的每个字符串都是不同的,但它们按顺序出现在列表中。 IE。我想要的第一个字符串总是出现在第二个字符串之前,第二个字符串会出现在第三个字符串之前,依此类推。但是,我不能只使用索引,因为列表之间的元素数量因列表而异。
例如。假设我抓取了这些字符串并将其存储在以下列表中:
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"]
我想抓取以名称、位置和房屋开头的元素,它们之间可能有也可能没有多个元素。 Location 将始终在 Name 之后,House 将始终在 Location 之后。
因为我将在许多列表中重复此操作,我想使用第一个正则表达式进行搜索,然后从我离开的地方继续使用下一个正则表达式进行搜索,因为我知道它们是按顺序出现的。在 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)
【问题讨论】:
-
如何将数据抓取到字典而不是列表中,这样您就可以使用
O(1)查找而不是O(n)? -
我目前有一组 for 循环,匹配时中断 - 显示该代码怎么样?
-
您可以在正则表达式中使用组,并将连续元素与连续组匹配。如果你想要一个使用它的例子,你可以在这里查看:csv.py in the function
_guess_quote_and_delimiterl.205 -
@DeepSpace 好主意,但我给出的示例的动机是从网站上抓取文本行,这些文本在解析之前自动存储在列表中。在我什至可以将它们存储在任何地方之前,我必须通过这些列表进行正则表达式搜索以获取我想要的信息。
-
@RomanPerekhrest 如果必须显示,我已经在上面添加了。
标签: python regex list loops pointers