如何在PySpark DataFrame的字母数字列中提取两个字母之间的数字
PySpark提取两个字母中间数字的实现方案
核心正则逻辑
根据你的数据规则,直接使用带捕获组的正则匹配即可:^[A-Za-z](\d+)[A-Za-z]
^匹配字符串开头- 第一个
[A-Za-z]匹配开头的第一个英文字母 (\d+)捕获组1,匹配1个及以上的连续数字(就是你要的两个字母中间的内容)- 第二个
[A-Za-z]匹配出现在第4-7位的第二个英文字母
代码实现
# 导入所需函数 from pyspark.sql.functions import regexp_extract # 假设你的DataFrame名为df,存储原始字符串的列名为raw_str df = df.withColumn( "middle_num", # 新列名 regexp_extract("raw_str", r"^[A-Za-z](\d+)[A-Za-z]", 1) )
注:
regexp_extract的第三个参数1代表取第一个捕获组的内容,正好对应两个字母中间的数字。如果需要数值类型可以在后面追加.cast("int")转成整型。
之前正则失效的原因
- 你用的
.*是贪婪匹配规则,会尽可能匹配更长的字符串,无法精准只保留中间数字 - 没有用捕获组把需要的数字单独拆分出来,所以匹配结果会包含前后的字母
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

