我有一个字符串N1 LTPO BABY FOOD 6 FOR £5
,我希望使用正则表达式从中提取6 FOR £5
。我正在使用pyspark。
Regex101告诉我[0-9]*\sFOR\s£[0-9]*
应该工作(https://regex101.com/r/OWAA2k/1)如果我尝试在pyspark中使用它我没有任何成功,下面的代码返回零行:
import pyspark.sql.functions as funcs
print sc.version
mock_data = [('N1 LTPO BABY FOOD 6 FOR £5','b'),('foo','bar')]
schema = ['a','b']
mock_df = sqlContext.createDataFrame(data=mock_data, schema=schema)
mock_df = mock_df.filter(mock_df.a.rlike('[0-9]*\sFOR\s£[0-9]*'))
mock_df.show(truncate=False)
如果我将正则表达式略微更改为[0-9]*\sFOR\s*
,那么我想要的数据会在中过滤,但请注意,井号是Â
的前缀
因此我可以将原始正则表达式更改为[0-9]*\sFOR\s£[0-9]*
并且它可以正常工作:
我的问题是......为什么这个奇怪的字符Â
出现在字符串中?为什么pyspark把它放在那里?我理解这将是一些与数据编码有关的事情,但这不是我所知道的,所以我希望有人可以向我解释并让我意识到任何潜在的陷阱。