regexp_replace 在 PySpark 中如何运作?
How does regexp_replace function in PySpark?
我似乎无法在网上找到有关此功能如何工作的任何信息。我有以下我试图理解的代码:
new_df = df.withColumn('a_col', regexp_replace('b_col','\{(.*)\}', '\[\]'))
这里替换了什么?另外,我在哪里可以找到定义要替换的模式的文档?
您对 REGEXP_REPLACE
的调用将查找大括号中的元素并替换为方括号中的相同元素。
Here is an {ELEMENT}.
变成
Here is an [ELEMENT].
附带说明一下,您可能希望在正则表达式模式中使用惰性点,以避免交叉匹配。如果是,则使用此版本:
new_df = df.withColumn('a_col', regexp_replace('b_col','\{(.*?)\}', '\[\]'))
您应该了解什么是正则表达式及其工作原理。简而言之,正则表达式可以检查输入字符串是否与正则表达式期望的匹配。例如,您的正则表达式可能是这样的:
[0-9]+
这意味着输入字符串必须是 0 到 9 之间的一个或任意数量的字符。当您在正则表达式(那些括号)中使用组时,正则表达式引擎将 return 匹配正则表达式的子字符串组内。现在在你的正则表达式中,那些花括号( {} )之间的任何东西都将被匹配并作为结果 returned,作为 first (注意第一个词这里)组值。 regexp_replace 接收一个列,一个正则表达式,并且需要知道如何处理表达式的 return 值,这将是第三个元素。现在这个 \[\]
的意思是获取第一组的结果(在我们的例子中是 ),并将它包裹在大括号中。 [, ], {, }
必须使用 \\ 进行转义,因为它们是有效的正则表达式术语,可以定义 class 或一个字符的数量。
点 (.) 匹配任意字符,'*' 表示“任意数量”,因此 .* 表示“任意数量的任意字符”。
我似乎无法在网上找到有关此功能如何工作的任何信息。我有以下我试图理解的代码:
new_df = df.withColumn('a_col', regexp_replace('b_col','\{(.*)\}', '\[\]'))
这里替换了什么?另外,我在哪里可以找到定义要替换的模式的文档?
您对 REGEXP_REPLACE
的调用将查找大括号中的元素并替换为方括号中的相同元素。
Here is an {ELEMENT}.
变成
Here is an [ELEMENT].
附带说明一下,您可能希望在正则表达式模式中使用惰性点,以避免交叉匹配。如果是,则使用此版本:
new_df = df.withColumn('a_col', regexp_replace('b_col','\{(.*?)\}', '\[\]'))
您应该了解什么是正则表达式及其工作原理。简而言之,正则表达式可以检查输入字符串是否与正则表达式期望的匹配。例如,您的正则表达式可能是这样的:
[0-9]+
这意味着输入字符串必须是 0 到 9 之间的一个或任意数量的字符。当您在正则表达式(那些括号)中使用组时,正则表达式引擎将 return 匹配正则表达式的子字符串组内。现在在你的正则表达式中,那些花括号( {\[\]
的意思是获取第一组的结果(在我们的例子中是 [, ], {, }
必须使用 \\ 进行转义,因为它们是有效的正则表达式术语,可以定义 class 或一个字符的数量。
点 (.) 匹配任意字符,'*' 表示“任意数量”,因此 .* 表示“任意数量的任意字符”。