我想剪掉一些地址的末尾:
"1 rue de l'église" => "1 rue de l'église"
"2 rue de la poste 公寓 B" => "2 rue de la poste"
"3 4 rue de la mairie 2eme étage" => "3 4 rue de la mairie"
规则是:如果在地址中间发现数字或关键字(“appartement”或“escalier”),则剪切前面的地址。
开头显然是“
^(\[0-9 \]\*
”,但我不能说“如果没有数字则取字符 OR 'appartement' OR 'escalier'”。
我的尝试之一:
my_df.select("adresse_rue").withColumn(
"adresse_rue",
f.regexp_extract(
"adresse_rue",
r'^([0-9 ]*[^(0-9| appartement | escalier )]*)([0-9]| appartement | escalier )?.*$',
0)).take(20)
也许
?:
和?!
可以提供帮助,但我没有找到如何帮助。
使用正则表达式,您的方向是正确的。您可以使用 负前瞻 断言
(?!pattern)
来实现所需的结果。以下是修改正则表达式的方法:
r'^(?:(?! +(?:\d+[a-z]|appartement|escalier)).)*'
说明:
(?:\d+[a-z]|appartement|escalier)
与您的关键字匹配(“appartement”或“escalier”,或后跟拉丁字母的任何数字序列)。(?! +(?:\d+[a-z]|appartement|escalier))
表示“后面至少没有一个空格和关键字”。(?:(?! +(?:\d+[a-z]|appartement|escalier)).)*
在每个匹配的字符之前进行此检查。