我的数据如下,
数据
url
http://hostname.com/part1/part2/part3/a+b+c+d
http://m.hostname.com/part3.html?nk!e+f+g+h&_junk
http://hostname.com/as/ck$st=f+g+h+k+i/
http://www.hostname.com/p-l-k?wod=q+w+e+r+t africa
我想检查网址中的第一个+符号并向后移动,直到我们找到一个特殊字符,例如/或?或=或任何其他特殊字符,从此开始,直到我们找到一个空格或行尾或&或/。我的输出应该是,
parsed
abcd
efgh
fghki
qwert
我的目标是在网址中找到第一个+并返回,直到我们找到一个特殊字符然后前行直到找到行尾或空格或者&符号
我是regex的新手并且仍在学习它,因为它有点复杂,我发现很难写。任何人都可以帮我写python中的正则表达式来解析这些吗?
由于
答案 0 :(得分:1)
因此,适当的正则表达式将解析所需的字符hive.hadoop.supports.splittable.combineinputformat
我在这里使用Javascript正则表达式。但是,您也应该能够在py中实现。
此正则表达式将从您的第一个网址中提取((.\+)+.)
。
需要进一步处理才能从a+b+c+d
获得abcd
。
我将稍微用py函数更新它。
答案 1 :(得分:1)
以下是适用于您的示例用例的表达式:
>>> import re
>>>
>>> l = [
... "http://hostname.com/part1/part2/part3/a+b+c+d",
... "http://m.hostname.com/part3.html?nk!e+f+g+h&_junk",
... "http://hostname.com/as/ck$st=f+g+h+k+i/",
... "http://www.hostname.com/p-l-k?wod=q+w+e+r+t africa"
... ]
>>>
>>> pattern = re.compile(r"[^\w\+]([\w\+]+\+[\w\+]+)(?:[^\w\+]|$)")
>>> for item in l:
... print("".join(pattern.search(item).group(1).split("+")))
...
abcd
efgh
fghki
qwert
这个想法基本上是捕获字母数字和非字母数字和非加号字符或字符串结尾之间的加号字符。然后,按加号和连接分开。
我觉得可以进一步简化/改进。