Используя Pyspark, регулярное выражение между двумя символами получает текст и цифры, но не дату - PullRequest
0 голосов
/ 08 января 2020

Используя 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|
+----+-----------------------------------------+-------------------+

Что я могу добавить к выражению regex, чтобы получить дату?

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Вы можете использовать

>([^<>]+)<

См. Демоверсию regex . Регулярное выражение соответствует >, затем захватывает в группу 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|
+----+-----------------------------------------+-------------------+
0 голосов
/ 08 января 2020

@ jx c Спасибо. Вот что заставило его работать:

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>         |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|
+----+-----------------------------------------+-------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...