我有一些文本需要用hadoop解析。我用Hive来做这个。我相信hive使用java正则表达式。我已经编写了一个python正则表达式来完成这项工作。下面是一个例子。我想捕获隐藏在文本块中的某个标记的值。斑点:
eufebuWT.tz=12&ufdneuhnf
python正则表达式:
a=re.search(r'(?s)(?<=WT.tz=).+?(?=(&|$))'
a.group()
>12
如果我把它插入hive的regexp\u extract()中,我会得到一个错误。如何将其翻译成与java兼容的regex?
2条答案
按热度按时间gstyhher1#
没关系,只是错过了一次逃跑。
p3rjfoxz2#
如果你打算抓住
12
输入字符串中的值(我假设从您拥有的正则表达式中),您最好使用一个取反的字符类[^&]
匹配*任何字符(即使是换行符,因此,不需要在(?s)
)而不是&
.参见regex演示。请注意,基于捕获组的解决方案在这里是最好的:
但是,这取决于在hadoop中实现什么更容易。
如果您仍然需要知道它是否是字符串的结尾,请将捕获组保留在末尾:
我将点 Package 到一个character类中,这样它就被视为一个文本句点,而不是任何字符,而是换行符子模式。