gpt4 book ai didi

Python正则表达式否定强制字符出现

转载 作者:行者123 更新时间:2023-12-01 02:29:55 28 4
gpt4 key购买 nike

我正在尝试创建一个正则表达式来匹配一年中月份的数字 1-12(其中第一位数字是可选的)和一个月中的天数 1-31,而不附加从 1 到 12 的所有数字。(想象一下内存,如果这是 1 - 100 万)

pd.Series(["some text8some text","some text13some text", "05"]).str.extract('(?P<mm>[1][012]|(?:[0])?[1-9])') 

在 8 上工作正常,但在 13 上工作而不是忽略它与 1 的匹配。所以我尝试了

pd.Series(["some text8some text","13some text", "05"]).str.extract('(?P<mm>[1][012]|(?:[0])?[1-9][^0-9])')

但它强制我在 8 之后有一个字符,否则不匹配。

有人可以帮忙解决这个正则表达式否定吗,它迫使我在 8 之后有一个字符来匹配?

所需的输出是

0: 8
1: Nan
2: 5

由于没有空格,单词边界将不起作用,从而迫使我们使用正则表达式否定。

最佳答案

您需要使用 anchor 或单词边界:

\b(?:1[0-2]|[1-9])\b

参见a demo on regex101.com

<小时/>对于 pandas,这可能是:

import pandas as pd

df = pd.Series(["8","13", "text in between 13 as well", "here is an 8 hidden"]).str.extract(r'(?P<mm>\b(?:1[0-2]|[1-9])\b)')
print(df)

这会产生

0      8
1 NaN
2 NaN
3 8
Name: mm, dtype: object

关于Python正则表达式否定强制字符出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46953437/

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