Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/docs/source/src/rust/user-guide/expressions/strings.rs
7889 views
1
fn main() -> Result<(), Box<dyn std::error::Error>> {
2
// --8<-- [start:df]
3
use polars::prelude::*;
4
5
let df = df! (
6
"language" => ["English", "Dutch", "Portuguese", "Finish"],
7
"fruit" => ["pear", "peer", "pêra", "päärynä"],
8
)?;
9
10
let result = df
11
.clone()
12
.lazy()
13
.with_columns([
14
col("fruit").str().len_bytes().alias("byte_count"),
15
col("fruit").str().len_chars().alias("letter_count"),
16
])
17
.collect()?;
18
19
println!("{result}");
20
// --8<-- [end:df]
21
22
// --8<-- [start:existence]
23
let result = df
24
.lazy()
25
.select([
26
col("fruit"),
27
col("fruit")
28
.str()
29
.starts_with(lit("p"))
30
.alias("starts_with_p"),
31
col("fruit").str().contains(lit("p..r"), true).alias("p..r"),
32
col("fruit").str().contains(lit("e+"), true).alias("e+"),
33
col("fruit").str().ends_with(lit("r")).alias("ends_with_r"),
34
])
35
.collect()?;
36
37
println!("{result}");
38
// --8<-- [end:existence]
39
40
// --8<-- [start:extract]
41
let df = df! (
42
"urls" => [
43
"http://vote.com/ballon_dor?candidate=messi&ref=polars",
44
"http://vote.com/ballon_dor?candidat=jorginho&ref=polars",
45
"http://vote.com/ballon_dor?candidate=ronaldo&ref=polars",
46
]
47
)?;
48
49
let result = df
50
.lazy()
51
.select([col("urls").str().extract(lit(r"candidate=(\w+)"), 1)])
52
.collect()?;
53
54
println!("{result}");
55
// --8<-- [end:extract]
56
57
// --8<-- [start:extract_all]
58
let df = df! (
59
"text" => ["123 bla 45 asd", "xyz 678 910t"]
60
)?;
61
62
let result = df
63
.lazy()
64
.select([col("text")
65
.str()
66
.extract_all(lit(r"(\d+)"))
67
.alias("extracted_nrs")])
68
.collect()?;
69
70
println!("{result}");
71
// --8<-- [end:extract_all]
72
73
// --8<-- [start:replace]
74
let df = df! (
75
"text" => ["123abc", "abc456"]
76
)?;
77
78
let result = df
79
.lazy()
80
.with_columns([
81
col("text").str().replace(lit(r"\d"), lit("-"), false),
82
col("text")
83
.str()
84
.replace_all(lit(r"\d"), lit("-"), false)
85
.alias("text_replace_all"),
86
])
87
.collect()?;
88
89
println!("{result}");
90
// --8<-- [end:replace]
91
92
// --8<-- [start:casing]
93
let addresses = df! (
94
"addresses" => [
95
"128 PERF st",
96
"Rust blVD, 158",
97
"PoLaRs Av, 12",
98
"1042 Query sq",
99
]
100
)?;
101
102
let addresses = addresses
103
.lazy()
104
.select([
105
col("addresses").alias("originals"),
106
col("addresses").str().to_titlecase(),
107
col("addresses").str().to_lowercase().alias("lower"),
108
col("addresses").str().to_uppercase().alias("upper"),
109
])
110
.collect()?;
111
112
println!("{addresses}");
113
// --8<-- [end:casing]
114
115
// --8<-- [start:strip]
116
let addr = col("addresses");
117
let chars = lit(", 0123456789");
118
let result = addresses
119
.lazy()
120
.select([
121
addr.clone().str().strip_chars(chars.clone()).alias("strip"),
122
addr.clone()
123
.str()
124
.strip_chars_end(chars.clone())
125
.alias("end"),
126
addr.clone().str().strip_chars_start(chars).alias("start"),
127
addr.clone().str().strip_prefix(lit("128 ")).alias("prefix"),
128
addr.str().strip_suffix(lit(", 158")).alias("suffix"),
129
])
130
.collect()?;
131
132
println!("{result}");
133
// --8<-- [end:strip]
134
135
// --8<-- [start:slice]
136
let df = df! (
137
"fruits" => ["pear", "mango", "dragonfruit", "passionfruit"],
138
"n" => [1, -1, 4, -4],
139
)?;
140
141
let result = df
142
.lazy()
143
.with_columns([
144
col("fruits")
145
.str()
146
.slice(col("n"), lit(NULL))
147
.alias("slice"),
148
col("fruits").str().head(col("n")).alias("head"),
149
col("fruits").str().tail(col("n")).alias("tail"),
150
])
151
.collect()?;
152
153
println!("{result}");
154
// --8<-- [end:slice]
155
156
Ok(())
157
}
158
159