【问题标题】:Extract a number of continuous digits from a random string in python [duplicate]从python中的随机字符串中提取多个连续数字[重复]
【发布时间】:2014-05-23 03:45:33
【问题描述】:

我正在尝试将这个包含 ID 值的字符串列表解析为一系列 7 位数字,但我不确定如何处理这个问题。

lst1=[
    "(Tower 3rd fl floor_WINDOW CORNER : option 2_ floor cut out_small_wood) : GA -   
Floors : : Model Lines : id 3925810 
(Tower 3rd fl floor_WINDOW CORNER : option 2_ floor cut out_small_wood) : GA - Floors : Floors : Floor : Duke new core floors : id 3925721",
        "(Tower 3rd fl floor_WINDOW CORNER : option 3_ floor cut out_large_wood) : GA - Floors : : Model Lines : id 3976019 
(Tower 3rd fl floor_WINDOW CORNER : option 3_ floor cut out_large_wood) : GA - Floors : Floors : Floor : Duke new core floors : id 3975995"
        ]

我真的想只提取数字值并将它们组合成一个用冒号“;”分隔的字符串。 结果列表将是这样的:

lst1 = ["3925810; 3925721", "3976019; 3975995"]

【问题讨论】:

  • 您的代码充满了语法错误。
  • 这些字符串来自解析 HTML 文件。它实际上只是一个长 1000 个实例的列表中的两个实例。它不是真正的代码,而是关于模型中某些对象的信息,所以它是文本。

标签: python regex string


【解决方案1】:

你可以使用正则表达式,像这样

import re
pattern = re.compile(r"\bid\s*?(\d+)")
print ["; ".join(pattern.findall(item)) for item in lst1]
# ['3925810; 3925721', '3976019; 3975995']

Debuggex Demo

如果你想确保你选择的数字只有 7 的长度,那么你可以这样做

pattern = re.compile(r"\bid\s*?(\d{7})\D*?")

Debuggex Demo

\b 指的是单词边界。因此,它确保 id 将是一个单独的单词,并且后跟 0 个或多个空格字符。然后我们匹配数字数字[0-9]\d 只是相同的简写符号。 {7} 只匹配 7 次,然后是 \D,它是 \d 的倒数。

【讨论】:

  • 很好 - 与我在重复线程中发布的几乎相同:)
  • @alecxe 看起来 OP 在您回答后编辑了另一个问题。
  • 所以这几乎可以工作,但对于像这样的字符串实例“(Tower 3rd floor_Wood Walls:仅选项 1 较低的架子):Workset1:Walls:Basic Wall:Tower Wood wall - 18”:id 5300208( Tower 3rd floor_Wood Walls:仅选项 1 下层架子):Workset1:Walls:3rd fl chamfer void 2:3rd fl chamfer void 1:id 5300288”它将返回“5300208; 2; 1个; 5300288"。它有没有理由拿起那两个额外的数字?
  • 是的,伙计们,我真的很抱歉编辑我仍然在寻找解决堆栈溢出的方法以及如何正确格式化这些帖子。我试图让这些 id 加粗,并在前后添加 ** ** ,但这会引发答案。对不起。
  • @konrad 啊,我明白了……我现在修好了。你能试试这个吗?
【解决方案2】:

假设您的列表是:

lst1=[
    "(Tower 3rd fl floor_WINDOW CORNER : option 2_ floor cut out_small_wood) : GA -   Floors : : Model Lines : id 3925810",
    "(Tower 3rd fl floor_WINDOW CORNER : option 2_ floor cut out_small_wood) : GA - Floors : Floors : Floor : Duke new core floors : id 3925721",
    "(Tower 3rd fl floor_WINDOW CORNER : option 3_ floor cut out_large_wood) : GA - Floors : : Model Lines : id 3976019",
    "(Tower 3rd fl floor_WINDOW CORNER : option 3_ floor cut out_large_wood) : GA - Floors : Floors : Floor : Duke new core floors : id 3975995"
        ]

这样就可以了:

lst2 = [i.rsplit(" ",1)[1] for i in lst1]

给出:

['3925810', '3925721', '3976019', '3975995']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 2021-12-31
    • 2021-03-06
    • 2022-08-14
    • 2019-01-12
    • 1970-01-01
    相关资源
    最近更新 更多