Path: blob/main/docs/source/src/rust/user-guide/expressions/strings.rs
7889 views
fn main() -> Result<(), Box<dyn std::error::Error>> {1// --8<-- [start:df]2use polars::prelude::*;34let df = df! (5"language" => ["English", "Dutch", "Portuguese", "Finish"],6"fruit" => ["pear", "peer", "pêra", "päärynä"],7)?;89let result = df10.clone()11.lazy()12.with_columns([13col("fruit").str().len_bytes().alias("byte_count"),14col("fruit").str().len_chars().alias("letter_count"),15])16.collect()?;1718println!("{result}");19// --8<-- [end:df]2021// --8<-- [start:existence]22let result = df23.lazy()24.select([25col("fruit"),26col("fruit")27.str()28.starts_with(lit("p"))29.alias("starts_with_p"),30col("fruit").str().contains(lit("p..r"), true).alias("p..r"),31col("fruit").str().contains(lit("e+"), true).alias("e+"),32col("fruit").str().ends_with(lit("r")).alias("ends_with_r"),33])34.collect()?;3536println!("{result}");37// --8<-- [end:existence]3839// --8<-- [start:extract]40let df = df! (41"urls" => [42"http://vote.com/ballon_dor?candidate=messi&ref=polars",43"http://vote.com/ballon_dor?candidat=jorginho&ref=polars",44"http://vote.com/ballon_dor?candidate=ronaldo&ref=polars",45]46)?;4748let result = df49.lazy()50.select([col("urls").str().extract(lit(r"candidate=(\w+)"), 1)])51.collect()?;5253println!("{result}");54// --8<-- [end:extract]5556// --8<-- [start:extract_all]57let df = df! (58"text" => ["123 bla 45 asd", "xyz 678 910t"]59)?;6061let result = df62.lazy()63.select([col("text")64.str()65.extract_all(lit(r"(\d+)"))66.alias("extracted_nrs")])67.collect()?;6869println!("{result}");70// --8<-- [end:extract_all]7172// --8<-- [start:replace]73let df = df! (74"text" => ["123abc", "abc456"]75)?;7677let result = df78.lazy()79.with_columns([80col("text").str().replace(lit(r"\d"), lit("-"), false),81col("text")82.str()83.replace_all(lit(r"\d"), lit("-"), false)84.alias("text_replace_all"),85])86.collect()?;8788println!("{result}");89// --8<-- [end:replace]9091// --8<-- [start:casing]92let addresses = df! (93"addresses" => [94"128 PERF st",95"Rust blVD, 158",96"PoLaRs Av, 12",97"1042 Query sq",98]99)?;100101let addresses = addresses102.lazy()103.select([104col("addresses").alias("originals"),105col("addresses").str().to_titlecase(),106col("addresses").str().to_lowercase().alias("lower"),107col("addresses").str().to_uppercase().alias("upper"),108])109.collect()?;110111println!("{addresses}");112// --8<-- [end:casing]113114// --8<-- [start:strip]115let addr = col("addresses");116let chars = lit(", 0123456789");117let result = addresses118.lazy()119.select([120addr.clone().str().strip_chars(chars.clone()).alias("strip"),121addr.clone()122.str()123.strip_chars_end(chars.clone())124.alias("end"),125addr.clone().str().strip_chars_start(chars).alias("start"),126addr.clone().str().strip_prefix(lit("128 ")).alias("prefix"),127addr.str().strip_suffix(lit(", 158")).alias("suffix"),128])129.collect()?;130131println!("{result}");132// --8<-- [end:strip]133134// --8<-- [start:slice]135let df = df! (136"fruits" => ["pear", "mango", "dragonfruit", "passionfruit"],137"n" => [1, -1, 4, -4],138)?;139140let result = df141.lazy()142.with_columns([143col("fruits")144.str()145.slice(col("n"), lit(NULL))146.alias("slice"),147col("fruits").str().head(col("n")).alias("head"),148col("fruits").str().tail(col("n")).alias("tail"),149])150.collect()?;151152println!("{result}");153// --8<-- [end:slice]154155Ok(())156}157158159