gpt4 book ai didi

python - 使用正则表达式提取特定单词之前的数字

转载 作者:行者123 更新时间:2023-12-02 19:07:39 25 4
gpt4 key购买 nike

目标

提取单词hourshourdaydays之前的数字

  1. 如何使用|来匹配单词?
s = '2 Approximately 5.1 hours 100 ays 1 s'
re.findall(r"([\d.+-/]+)\s*[days|hours]", s) # note I do not know whether string s contains hours or days

返回

['5.1', '100', '1']

由于 100 和 1 不在确切的单词时间之前,因此它们不应显示。预计

5.1
  • 如何从匹配结果中提取第一个数字
  • s1 = '2 Approximately 10.2 +/- 30hours'
    re.findall(r"([\d. +-/]+)\s*hours|\s*hours", s)

    返回

    ['10.2 +/- 30']

    期待

    10.2

    请注意,特殊字符 +/-. 是可选的。当 . 出现时,例如 1.3,1.3 需要与 . 一起显示。但是,当 1 +/- 0.5 发生时,需要提取 1,并且不应提取任何 +/-

    我知道我可能可以进行拆分,然后取第一个数字

    str(re.findall(r"([\d. +-/]+)\s*hours", s1)[0]).split(" ")[1]

    给予

    '10.2'

    但有些结果只返回一个数字,因此拆分会导致错误。我应该通过另一步骤执行此操作还是可以一步完成此操作?

    请注意,这些字符串 s1s2 是数据帧中的值。因此,需要使用 applylambda 等函数进行迭代。

    最佳答案

    事实上,我会在这里使用re.findall:

    units = ["hours", "hour", "days", "day"]   # the order matters here: put plurals first
    regex = r'(?:' + '|'.join(units) + r')'
    s = '2 Approximately 5.1 hours 100 ays 1 s'
    values = re.findall(r'\b(\d+(?:\.\d+)?)\s+' + regex, s)
    print(values) # prints [('5.1')]

    如果您想捕获正在使用的单位,则进行单位交替捕获,即使用:

    regex = r'(' + '|'.join(units) + r')'

    那么输出将是:

    [('5.1', 'hours')]

    关于python - 使用正则表达式提取特定单词之前的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64801043/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com