regex - 使用 Pyspark,两个字符之间的正则表达式获取文本和数字,但不是日期
问题描述
使用 Pyspark regex_extract() 我可以在字符串中的两个字符之间进行子串化。它抓取文本和数字,但不抓取日期。
data = [('2345', '<Date>1999/12/12 10:00:05</Date>'),
('2398', '<Crew>crewIdXYZ</Crew>'),
('2328', '<Latitude>0.8252644369443788</Latitude>'),
('3983', '<Longitude>-2.1915840465066916<Longitude>')]
df = sc.parallelize(data).toDF(['ID', 'values'])
df.show(truncate=False)
+----+-----------------------------------------+
|ID |values |
+----+-----------------------------------------+
|2345|<Date>1999/12/12 10:00:05</Date> |
|2398|<Crew>crewIdXYZ</Crew> |
|2328|<Latitude>0.8252644369443788</Latitude> |
|3983|<Longitude>-2.1915840465066916<Longitude>|
+----+-----------------------------------------+
df_2 = df.withColumn('vals', regexp_extract(col('values'), '(.)((?<=>)[^<:]+(?=:?<))', 2))
df_2.show(truncate=False)
+----+-----------------------------------------+-------------------+
|ID |values |vals |
+----+-----------------------------------------+-------------------+
|2345|<Date>1999/12/12 10:00:05</Date> | |
|2398|<Crew>crewIdXYZ</Crew> |crewIdXYZ |
|2328|<Latitude>0.8252644369443788</Latitude> |0.8252644369443788 |
|3983|<Longitude>-2.1915840465066916<Longitude>|-2.1915840465066916|
+----+-----------------------------------------+-------------------+
我可以在正则表达式语句中添加什么来获取日期?
解决方案
您可以使用
>([^<>]+)<
请参阅正则表达式演示。正则表达式匹配 a ,然后将除and之外的>
任何一个或多个字符捕获到第 1 组中,然后仅匹配。ncol参数应设置为,因为您需要的值在第 1 组中:<
>
>
1
df_2 = df.withColumn('vals', regexp_extract(col('values'), '>([^<>]+)<', 1))
df_2.show(truncate=False)
+----+-----------------------------------------+-------------------+
|ID |values |vals |
+----+-----------------------------------------+-------------------+
|2345|<Date>1999/12/12 10:00:05</Date> |1999/12/12 10:00:05|
|2398|<Crew>crewIdXYZ</Crew> |crewIdXYZ |
|2328|<Latitude>0.8252644369443788</Latitude> |0.8252644369443788 |
|3983|<Longitude>-2.1915840465066916<Longitude>|-2.1915840465066916|
+----+-----------------------------------------+-------------------+
推荐阅读
- javascript - fnPageChange 不是函数
- c#-4.0 - 水平打开 XML 2.0 Word 文档合并单元格
- python - 使用 Python 打印与平均值偏差 1 范围内的所有数字
- mysql - Sequlize Fetch 没有关联子级的行
- android - 如何从 retrofit2 调用 localhost?
- c# - DatagridView 单元格改变颜色
- google-chrome - 无法在 google chrome 扩展市场之外更新扩展
- mongodb - 使用 Spring Boot 动态创建 mongoDB 集合并插入 json 数组数据
- ansible - 是否可以在 Ansible 的 playbook APK 和 APT 包管理器中同时管理?
- java - Java 8 中的地图过滤列表