polars.Expr.str.extract_all#

Expr.str.extract_all(pattern: str | Expr) Expr[source]#

提取给定正则表达式模式的所有匹配项。

提取每个连续不重叠的正则表达式匹配作为一个列表。如果干草堆字符串是null,则返回null

Parameters:
pattern

一个有效的正则表达式模式,与regex crate兼容。

Returns:
Expr

数据类型 List(String) 的表达。

注释

要使用标志修改正则表达式的行为(例如“详细”模式和/或区分大小写的匹配),请使用内联的 (?iLmsuxU) 语法。例如:

>>> df = pl.DataFrame(
...     data={
...         "email": [
...             "real.email@spam.com",
...             "some_account@somewhere.net",
...             "abc.def.ghi.jkl@uvw.xyz.co.uk",
...         ]
...     }
... )
>>> # extract name/domain parts from the addresses, using verbose regex
>>> df.with_columns(
...     pl.col("email")
...     .str.extract_all(
...         r"""(?xi)   # activate 'verbose' and 'case-insensitive' flags
...         [           # (start character group)
...           A-Z       # letters
...           0-9       # digits
...           ._%+\-    # special chars
...         ]           # (end character group)
...         +           # 'one or more' quantifier
...         """
...     )
...     .list.to_struct(fields=["name", "domain"])
...     .alias("email_parts")
... ).unnest("email_parts")
shape: (3, 3)
┌───────────────────────────────┬─────────────────┬───────────────┐
│ email                         ┆ name            ┆ domain        │
│ ---                           ┆ ---             ┆ ---           │
│ str                           ┆ str             ┆ str           │
╞═══════════════════════════════╪═════════════════╪═══════════════╡
│ real.email@spam.com           ┆ real.email      ┆ spam.com      │
│ some_account@somewhere.net    ┆ some_account    ┆ somewhere.net │
│ abc.def.ghi.jkl@uvw.xyz.co.uk ┆ abc.def.ghi.jkl ┆ uvw.xyz.co.uk │
└───────────────────────────────┴─────────────────┴───────────────┘

有关内联表达式修饰符使用的更多信息,请参阅正则表达式库的分组和标志部分。

示例

>>> df = pl.DataFrame({"foo": ["123 bla 45 asd", "xyz 678 910t", "bar", None]})
>>> df.select(
...     pl.col("foo").str.extract_all(r"\d+").alias("extracted_nrs"),
... )
shape: (4, 1)
┌────────────────┐
│ extracted_nrs  │
│ ---            │
│ list[str]      │
╞════════════════╡
│ ["123", "45"]  │
│ ["678", "910"] │
│ []             │
│ null           │
└────────────────┘