对于
我正在尝试创建一个正则表达式来匹配一年中月份的数字 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
由于没有空格,单词边界将不起作用,因此迫使我们使用正则表达式否定。
您需要使用锚点或单词边界:
b(?:1[0-2]|[1-9])b
在 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