| |
- regexp_substr(source_string, regexp_string, position_arg, occurrence_arg, match_arg)
- DESCRIPTION:
Function extracts a substring from source_string that matches a regular
expression specified by regexp_string.
PARAMETERS:
source_string:
Required Argument.
Specifies a ColumnExpression of a string column or a string literal
from which substring is to be extracted.
Format for the argument: '<dataframe>.<dataframe_column>.expression'.
If source_string is NULL, NULL is returned.
regexp_string:
Required Argument.
Specifies a ColumnExpression of a string column or a string literal
which is to be used as regex.
Format for the argument: '<dataframe>.<dataframe_column>.expression'.
If regexp_string is NULL, NULL is returned.
position_arg:
Optional Argument.
Specifies the position in source_string from which to start searching.
Argument accepts a ColumnExpression of a numeric column or a numeric constant.
If the value greater than the input string length, NULL is returned.
If the value is NULL, the value NULL is returned.
If argument is not specified, the default value (1) is used.
occurrence_arg:
Optional Argument.
Specifies the number of the occurrence to be returned.
For example, if occurrence_arg is 2, the function matches the first occurrence
in source_string and starts searching from the character following the first
occurrence in source_string for the second occurrence in source_string.
Argument accepts a ColumnExpression of a numeric column or a numeric constant.
If the value is greater than the number of matches found, NULL is returned.
If the value is NULL, a NULL result is returned.
If argument is not specified, the default value (1) is used.
match_arg:
Optional Argument.
Specifies a character which decides the handling of regex matching.
Valid values are:
* 'i' = case-insensitive matching.
* 'c' = case sensitive matching.
* 'n' = the period character (match any character) can match the newline character.
* 'm' = source_string is treated as multiple lines instead of as a single line.
With this option, the '^' and '$' characters apply to each line in source_string
instead of the entire source_string.
* 'l' = if source_string exceeds the current maximum allowed source_string size
(currently 16 MB), a NULL is returned instead of an error. This is useful for
long-running queries where you do not want long strings causing an error that
would make the query fail.
* 'x' = ignore whitespace.
The argument can contain more than one character.
Notes:
1. If a character in the argument is not valid, then that character is ignored.
2. If match_arg is not specified, is NULL, or is empty:
a. The match is case-sensitive.
b. A period does not match the newline character.
c. source_string is treated as a single line.
NOTE:
Function accepts positional arguments only.
EXAMPLES:
# Load the data to run the example.
>>> load_example_data("dataframe", "admissions_train")
>>>
# Create a DataFrame on 'admissions_train' table.
>>> admissions_train = DataFrame("admissions_train")
>>> admissions_train
masters gpa stats programming admitted
id
22 yes 3.46 Novice Beginner 0
36 no 3.00 Advanced Novice 0
15 yes 4.00 Advanced Advanced 1
38 yes 2.65 Advanced Beginner 1
5 no 3.44 Novice Novice 0
17 no 3.83 Advanced Advanced 1
34 yes 3.85 Advanced Beginner 0
13 no 4.00 Advanced Novice 1
26 yes 3.57 Advanced Advanced 1
19 yes 1.98 Advanced Advanced 0
>>>
# Example extracts "no" substring from "stats" column.
# Import func from sqlalchemy to execute regexp_substr() function.
>>> from sqlalchemy import func
# Create a sqlalchemy Function object.
# Note: Function name is case-insensitive.
>>> regex_substr_ = func.REGEXP_SUBSTR(admissions_train.stats.expression, "no", 1, 1, 'i')
>>>
# Pass the Function object as input to DataFrame.assign().
>>> df = admissions_train.assign(regex_substr_col=regex_substr_)
>>> print(df)
masters gpa stats programming admitted regex_substr_col
id
15 yes 4.00 Advanced Advanced 1 None
7 yes 2.33 Novice Novice 1 No
22 yes 3.46 Novice Beginner 0 No
17 no 3.83 Advanced Advanced 1 None
13 no 4.00 Advanced Novice 1 None
38 yes 2.65 Advanced Beginner 1 None
26 yes 3.57 Advanced Advanced 1 None
5 no 3.44 Novice Novice 0 No
34 yes 3.85 Advanced Beginner 0 None
40 yes 3.95 Novice Beginner 0 No
>>>
|