python - Python 上的不规则字符串解析

标签 python django string parsing web

我是 python/django 新手,我正在尝试从我的抓取工具中找出更有效的信息。目前,抓取工具获取漫画书标题列表,并将其正确分为三部分(发布日期、原始日期和标题)的 CSV 列表。然后,我将当前日期和标题传递到数据库的不同部分,这是我在加载器脚本中执行的操作(将 mm/dd/yy 转换为 yyyy-mm-dd,保存到“pub_date”列,标题转到“title”柱子)。

常见的字符串可能如下所示:

10/12/11|10/12/11|Stan Lee's Traveler #12 (10 Copy Incentive Cover)

我成功地获取了日期,但标题比较棘手。在这种情况下,我理想地希望在第二个“|”之后填充三个不同的列。标题应该转到“title”,即一个charfield。数字 12(在“#”之后)应该进入 DecimalField“issue_num”,而“()”之间的所有内容都应该进入“Special”字符域。我不知道如何进行这种严格的解析。

有时,有多个 #(特别是一个漫画被描述为一个 bundle ,“包含问题 #90-#95”),并且有几个具有多个“()”组(例如“背叛地球” 《猩球崛起》#1(共 4 张)(25 份激励封面) )

开始解决这个问题的好方法是什么?对于更复杂的行,我对 If/else 语句的了解很快就崩溃了。我怎样才能有效地(如果可能的话)Python式地解析这些行并分割它们,以便以后可以将它们插入数据库中的正确位置?

最佳答案

使用regular expression模块re。例如,如果您的示例记录的第三个 | 分隔字段位于变量 s 中,那么您可以这样做

match = re.match(r"^(?P<title>[^#]*) #(?P<num>[0-9]+) \((?P<special>.*)\)$", s)
title = match.groups('title')
issue = match.groups('num')
special = match.groups('special')

如果缺少字段,您将在最后三行中收到 IndexError。调整 RE,直到它解析出您想要的所有内容。

关于python - Python 上的不规则字符串解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7698034/

相关文章:

c - C语言中switch语句中如何使用字符串?

string - 如何连接不带空格?

python - Keras 模型给出的测试精度为 1.0

django - 如何使用 Django 中的通用 View CreateView 自定义表单的 View

python - 了解 Django 的缓存框架如何工作并处理不同用户角色的缓存页面

python - 将项目添加到购物车 Django Python

java - 拆分字符串时数组越界异常

python - 尝试在 python 中比较两个字符串

python - 如何计算 Python 合并排序算法中的交换次数

python - 在 python 中使用 Onnx 模型运行推理?