【问题标题】:Error with Regex matching method for pattern matching [duplicate]用于模式匹配的正则表达式匹配方法出错[重复]
【发布时间】:2021-12-23 10:01:40
【问题描述】:

我有一个如下的数据框:-

df = pd.DataFrame([['Test-143'], ['Test-1435'], ['Test-123'],['Test-12']], columns = ['column1'])

df
     column1
0   Test-143
1   Test-1435
2   Test-123
3   Test-12

现在我想用Test- 提取三位数的记录。这些记录是Test-143,Test-123。当我试图实现它时,当我使用诸如Test-\d\d,Test-\d{3} 之类的正则表达式模式时,我遇到了一些问题,它给了我所有记录,当我通过放置+$ 进行限制时,它给我一个错误,如下所示:-

res = df[df['column1'].str.match(re.compile(r'Test-\d{3}+$'),na=False)]
res
error: multiple repeat at position 10

错误是什么意思?如何获得异常输出:-

     column1
0   Test-143
2   Test-123

【问题讨论】:

  • 范围{3} 是一个自包含量词。在 Python 中,只有 ? 可以叠加到量词上,而 ? 是不情愿的。 + 不能在 Python 重新引擎中堆积(在正则表达式引擎中可以)。加号+ 的堆积是一个 PCRE / Perl(或 Python 正则表达式引擎)构造,意味着具有占有性,而不是回溯任何回溯(如果可以回溯)。它是 atomic 的简写。

标签: python regex dataframe


【解决方案1】:

您正在双重限定位数:

`\d{3}+$`  

\d{3} 表示 3 位数字,+ 表示直接在 + 之前的 1 个或多个事物 - $ 是字符串的结尾。

因此:

error: multiple repeat at position 10

删除其中一个 - 如果您想要 3 位数字,请删除 +。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多