gpt4 book ai didi

python - 正则表达式将唯一字符串提取到新列,出现错误 "look-behind requires fixed-width pattern"

转载 作者:行者123 更新时间:2023-12-04 10:40:30 25 4
gpt4 key购买 nike

我需要帮助将唯一字符串提取到单独的列中。

df = pd.DataFrame({'File Name':['90.12.21 / 02.05 / XO3 File Name Type', 
'10.22.43 / X.89 / XO20G9992 Document Internal Only',
'Phase 3',
'22.32.42.12 / 99.23 / XO2 Location Site 3: Park Triangle',
'38.23.99.22 / X.23 / XO28W9998 Block 4 Beach/Dock Camp',
'39.24.32.49 / 37.29 / Blue-print/Register Info Site (RISs)',
'23.21.53.32 / Q.21 / XO R9924 Location Place 5: Drive Place (Active)',
' 33.51.63.33 / X.21 / XO20W8812 Area Place 1: Beach Drive']})

这是数据框目前的样子:
| File Name                                                            |
|----------------------------------------------------------------------|
| 90.12.21 / 02.05 / XO3 File Name Type |
| 10.22.43 / X.89 / XO20G9992 Document Internal Only |
| Phase 3 |
| 22.32.42.12 / 99.23 / XO2 Location Site 3: Park Triangle |
| 38.23.99.22 / X.23 / XO28W9998 Block 4 Beach/Dock Camp |
| 39.24.32.49 / 37.29 / Blue-print/Register Info Site (RISs) |
| 23.21.53.32 / Q.21 / XO R9924 Location Place 5: Drive Place (Active) |
| 33.51.63.33 / X.21 / XO20W8812 Area Place 1: Beach Drive |

这是我需要的样子:
| File Name                              |
|----------------------------------------|
| File Name Type |
| Document Internal Only |
| |
| Location Site 3: Park Triangle |
| Block 4 Beach/Dock Camp |
| Blue-print/Register Info Site (RISs) |
| Location Place 5: Drive Place (Active) |
| Area Place 1: Beach Drive |

这是我尝试的解决方案:

我知道 str.extract(r'')将正则表达式提取到新列中。我也知道在 Regex 中,“正向后视”将从字符串的末尾选择我想要的所有内容。所以我创建了一个正面的后视正则表达式表达式,它捕获了我想要的大部分字符串: https://regexr.com/4t4ll .它仍然不是一个完美的解决方案。

但即使我尝试使用以下代码行提取我的选择: df['File Name'].str.extract(r'((?<=\/ XO\d |XO\d[0-9]\w\d\d\d\d | XO \w\d\d\d\d ).*)') ,我收到一条错误消息:“后视需要固定宽度的模式。”

我需要帮助弄清楚如何使我的正则表达式在 str.extract(r'') 中起作用以及如何让我的 Regex 表达式捕获出现在每个条目末尾的所有字符串?

最佳答案

您可以使用

.*\s/(?:\s+XO[A-Z0-9\s]*\b)?\s+(.+)

regex demo .

详情
  • .* - 除换行符以外的 0+ 个字符,尽可能多
  • \s - 一个空格
  • / - 一个 /字符
  • (?:\s+XO[A-Z0-9\s]*\b)? - 可选模式:
  • \s+ - 1+ 个空格
  • XO - XO
  • [A-Z0-9\s]* - 0+ 大写字母或数字后跟
  • \b - 一个词边界
  • \s+ - 1+ 个空格
  • (.+) - 第 1 组(str.extract 将返回的内容):除换行符以外的任何 1+ 个字符,尽可能多的

  • 在 Pandas 中,使用
    df['Result'] = df['File Name'].str.extract(r'.*\s/(?:\s+XO[A-Z0-9\s]*\b)?\s+(.+)', expand=False).fillna('')

    结果:
                                       Result  
    0 File Name Type
    1 Document Internal Only
    2
    3 Location Site 3: Park Triangle
    4 Block 4 Beach/Dock Camp
    5 Blue-print/Register Info Site (RISs)
    6 Location Place 5: Drive Place (Active)
    7 Area Place 1: Beach Drive

    关于python - 正则表达式将唯一字符串提取到新列,出现错误 "look-behind requires fixed-width pattern",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59958054/

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