我在使用re库从URL确定字符串时遇到了一些麻烦。
这是一个例子:
http://www.example.it/remoteconnexion.aspx?u=xxxxx@abc.it&direction=vente.aspx%3pid%xx123%63abcd"
我有一个数据框,我想使用其他列中的值添加列,在此示例中,df [' URL_REG']包含:' 123'?
df['URL_REG'] = df['URL'].map(lambda x : re.findall(r'[REGEX]+', x)[0])
URL的结构可以改变,但我想要的部分总是来自' direction = vente.aspx%3pid%'和'%'。
答案 0 :(得分:2)
使用矢量化Series.str.extract()方法:
In [50]: df['URL_REG'] = df.URL.str.extract(r'direction=vente.aspx\%3pid\%([^\%]+)\%*',
expand=False)
In [51]: df
Out[51]:
URL URL_REG
0 http://www.example.it/remoteconnexion.aspx?u=x... xx123
<强>更新强>
我只想'123'而不是'xx123',其中'xx'是十六进制数
In [53]: df['URL_REG'] = df.URL.str.extract(r'direction=vente.aspx\%3pid\%\w{2}(\d+)\%*',
expand=False)
In [54]: df
Out[54]:
URL URL_REG
0 http://www.example.it/remoteconnexion.aspx?u=x... 123
答案 1 :(得分:0)
您可以使用此模式:
import re
url='http://www.example.it/remoteconnexion.aspxu=xxxxx@abc.it&direction=vente.aspx%3pid%xx123%63abcd'
output = re.findall('3pid%(.*?)%', url)
print(output)
输出:
['xx123']
然后将相同的模式应用于您的DataFrame。
例如:
import pandas as pd
import re
df = pd.DataFrame(['http://www.example.it/remoteconnexion.aspx?u=xxxxx@abc.it&direction=vente.aspx%3pid%xx123%63abcd'], columns = ['URL'])
output = df['URL'].apply(lambda x : re.findall('3pid%(.*?)%', x))
print(output)
# Or, maybe if you want to return the url and the data captured:
# output = df['URL'].apply(lambda x : (x, re.findall('3pid%(.*?)%', x)))
# output[0]
# >>> ('http://www.example.it/remoteconnexion.aspx?u=xxxxx@abc.it&direction=vente.aspx%3pid%xx123%63abcd',
# ['xx123'])
输出:
0 [xx123]
Name: URL, dtype: object